jdbc入门理解-学习javaweb必看
JDBC(Java DataBase Connectivity,Java数据库链接),提供了一系列平台无关的关于执行SQL语句的标准Java API,可以方便地实现多种关系型数据库的统一操作,有一组由java语言编写的类和接口组成;
在实际开发中,可以使用JDBC进行各个数据库的链接与操作,而且可以方便向数据库中发送各种SQL命令,在JDBC中提供的是一套标准的接口,各个支持JAVA的数据库生产商只要按此接口提供相应的驱动实现,就可以使用JDBC操作,最大地体现了JAVA的可移植性设计思想!
JDBC驱动分类:
1.JDBC-ODBC桥驱动:ODBC是开发式数据库连接平台,是微软Windows的服务,这个驱动是JDBC通过ODBC进行数据库连接操作,但性能较低,开发中不会使用这种方式!
程序—>JDBC—>ODBC—->数据库; // 有SUN来维护,但不使用开发
2.JDBC本地驱动:
表示各个数据库厂商根据JDBC提供的接口进行开发各自数据库平台的支持JDBC的驱动程序,在java开发中使用此种驱动可以获得较高的性能,但丧失了程序在各数据库平台上的可移植性!
程序—>JDBC—->数据库;
3.JDBC网络驱动:将JDBC转换为与DBMS无关的网络协议,这种协议有可被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯java客户机链接到多种不同的数据库上。所用的具体协议取决于提供者,这是最为灵活的JDBC驱动程序;// 是DBA的任务!
4.本地协议纯JDBC驱动:
将JDBC调用直接转换为DBMS所使用的网络协议,这样客户端就可以直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法!
// 数据库操作的过程:
1.打开数据库服务;
2.连接数据库,可能需要输入用户名、密码;
3.操作数据库,创建表,查询表,更新记录;
4.关闭链接,事务提交;
// 涉及到的类与接口:
1.public class DriverManager
extends Object; // 取得数据库连接
2.public interface Connection
extends Wrapper;// 其对象表示当前的数据库连接;
3.数据库的操作:
public interface Statement
extends Wrapper;// 执行静态的sql语句并返回结果!
public interface PreparedStatement
extends Statement;// 预编译的sql语句对象,表示一组sql操作,可以多次使用!
4.数据库的查询:
public interface ResultSet
extends Wrapper;// 表示查询数据库返回的结果集;
5.
public class Date
extends Date;// 表示日期,java.util.Date的子类;
6.public interface CallableStatement
extends PreparedStatement; // 执行数据库存储涉及到的步骤!
7.public interface DatabaseMetaData
extends Wrapper;// 数据库的概要信息:厂商等!
———SQL:结构化查询语言:
分三类:1.DML,数据库操作语言,检索或修改数据;
2.DDL,数据库定义语言,定义数据结构,如创建、修改或删除数据库对象;
3.DCL,数据库控制语言,定义数据库用户的权限;
// increment
drop table student;
create table student(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex VARCHAR(2) DEFAULT ‘男’,
birthday DATE
);
insert into student(name, age, sex, birthday) values(‘王敏’, 20, ‘女’, 20090105);
—————–连接mysql数据库:
package com.mldn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class JdbcMysql
{
// 定义JDBC连接驱动(JDBC厂商驱动)
// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar
public static final String DRIVER = “com.mysql.jdbc.Driver”;
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args)
{
Connection conn = null; // 数据库连接
Statement stmt = null; // 数据库会话
ResultSet rs = null; // 查询结果集
try
{
try
{
Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话
/*String insert = “INSERT INTO student(name, age, sex, birthday) VALUES(‘Jim’, 29, ‘男’, 19900628)”;// 插入
String update = “update student set age = 31 where id = 2”; // sql更新
String delete = “delete from student where id = 18”; // 删除一行*/
String sql = “select * from student”; // sql语句
rs = stmt.executeQuery(sql); // 执行查询并返回
while (rs.next()) // 输出ResultSet
{
System.out.print(rs.getString(1) + ” “); // 获取字段1
System.out.print(rs.getString(2) + ” “);
System.out.print(rs.getString(3) + ” “);
System.out.print(rs.getString(4) + ” “);
System.out.print(rs.getString(5) + “\n”);
}
}
finally
{
rs.close(); // 关闭读取
stmt.close(); // 关闭会话
conn.close(); // 关闭连接
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace(); // 加载驱动时找不到驱动class文件
}
catch (SQLException e)
{
e.printStackTrace(); // sql异常
}
}
}
/*
ubuntu@xu-desktop:~$ javac -d . work/JdbcMysql.java
ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql
1 王敏 20 女 2009-01-05
3 王方 24 女 2009-01-05
4 李林 23 女 2009-01-05
5 张速 21 男 2009-01-05
6 赵凌 25 女 2009-01-05
7 扬名 25 女 2009-01-05
8 徐鸣 22 男 1986-01-05
9 王菲 23 女 1985-01-05
10 高峰 22 男 1984-01-05
11 孙值 21 女 1983-01-05
12 蔡瑁 24 女 1988-01-05
*/
———–数据库连接地址的形式:
有三部分组成:
1.jdbc协议:JDBC URL中的协议总是 “jdbc:”;
2.子协议:驱动程序名或数据库链接机制(这种机制由一个或多个驱动程序支持)的名称,如:mysql:
3.子名称:一种标识数据库的方法。必须遵循“//主机名:端口号/子协议”的标准URL命名约定,
如://localhost:3306/school. // school 表示数据库名;
———–实现数据库的插入、更新、删除、查询:
package com.mldn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.Scanner;
public class JdbcMysql
{
// 定义JDBC连接驱动(JDBC厂商驱动)
// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar
public static final String DRIVER = “com.mysql.jdbc.Driver”;
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args)
{
Connection conn = null; // 数据库连接
Statement stmt = null; // 数据库会话
ResultSet rs = null; // 查询结果集
try
{
try
{
Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话
Scanner in = new Scanner(System.in); // 接收用户输入
System.out.println(“请输入更新操作:”);
if (in.hasNextLine())
{
int status = 0;
status = stmt.executeUpdate(in.nextLine()); // 执行用户sql操作
if (status != 0)
{
System.out.println(“操作成功!”);
}
else
{
System.out.println(“操作失败,可能是语法错误,或者操作对象不存在!”);
}
}
System.out.println(“输入查询操作:”);
rs = stmt.executeQuery(in.nextLine()); // 执行查询并返回结果
while (rs.next()) // 输出ResultSet
{
System.out.print(rs.getString(1) + ” “); // 获取字段1
System.out.print(rs.getString(2) + ” “);
System.out.print(rs.getString(3) + ” “);
System.out.print(rs.getString(4) + ” “);
System.out.print(rs.getString(5) + “\n”);
}
}
finally
{
rs.close(); // 关闭读取
stmt.close(); // 关闭会话
conn.close(); // 关闭连接
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace(); // 加载驱动时找不到驱动class文件
}
catch (SQLException e)
{
e.printStackTrace(); // sql异常
}
}
}
/*
ubuntu@xu-desktop:~$ javac -d . work/JdbcMysql.java
ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql
请输入更新操作:
delete from student where id = 20
操作成功!
输入查询操作:
select * from student;
1 王敏 20 女 2009-01-05
14 梨花 23 女 1991-02-08
3 王方 31 女 2009-01-05
4 李林 23 女 2009-01-05
5 张速 21 男 2009-01-05
6 赵凌 25 女 2009-01-05
7 扬名 25 女 2009-01-05
8 徐鸣 22 男 1986-01-05
9 王菲 23 女 1985-01-05
10 高峰 22 男 1984-01-05
11 孙值 21 女 1983-01-05
12 蔡瑁 24 女 1988-01-05
15 Jim 29 男 1990-06-28
16 Jim 29 男 1990-06-28
17 Jim 29 男 1990-06-28
*/
———执行数据库查询、删除、插入、更新:
package com.mldn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.Scanner;
public class JdbcMysql
{
// 定义JDBC连接驱动(JDBC厂商驱动)
// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar
public static final String DRIVER = “com.mysql.jdbc.Driver”;
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args)
{
Connection conn = null; // 数据库连接
Statement stmt = null; // 数据库会话
int status = 0; // 更新状态
try
{
try
{
Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话
Scanner in = new Scanner(System.in); // 接收用户输入;
in.useDelimiter(“\n”);
System.out.println(“请输入更新操作:”);
String sql = null;
while (in.hasNextLine())
{
System.out.println(“执行!!!”);
sql = in.nextLine();
System.out.println(sql);
if (sql.trim().matches(“^.+\\S+.+$”)) // 输入不能全是空格!
{
break;
}
else
{
System.out.println(“请输入更新操作:”);
}
}
status = stmt.executeUpdate(sql); // 执行用户sql操作
}
finally
{
if (conn == null)
{
System.out.println(“驱动加载失败,查看类路径配置!”);
return; // 退出程序
}
if (stmt == null)
{
System.out.println(“创建会话失败!”);
conn.close();
return; // exit
}
if (status > 0)
{
System.out.println(“更新成功!”);
}
else
{
System.out.println(“更新出错:数据源不存在或者语法错误!”);
stmt.close();
conn.close();
return;
}
query(stmt); // 输出表
stmt.close(); // 关闭会话
conn.close(); // 关闭连接
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void query(Statement stmt) throws Exception
{
ResultSet rs = stmt.executeQuery(“select * from student”); // 执行查询并返回结果
while (rs.next()) // 输出ResultSet
{
/*System.out.print(rs.getString(1) + ” “); // 获取字段1
System.out.print(rs.getString(2) + ” “);
System.out.print(rs.getString(3) + ” “);
System.out.print(rs.getString(4) + ” “);
System.out.print(rs.getString(5) + “\n”);*/
int id = rs.getInt(“id”);
String name = rs.getString(“name”);
int age = rs.getInt(3);
String sex = rs.getString(“sex”);
java.util.Date date = rs.getDate(5);
System.out.print(“id:” + id + ” “);
System.out.print(“姓名:” + name + ” “);
System.out.print(“年龄:” + age + ” “);
System.out.print(“性别:” + sex + ” “);
System.out.print(“生日:” + date + “\n”);
}
}
}
/*
ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql
请输入更新操作:
insert into student(name, age) values(‘wangli’, 33);
执行!!!
insert into student(name, age) values(‘wangli’, 33);
更新成功!
id:1 姓名:王敏 年龄:20 性别:女 生日:2009-01-05
id:14 姓名:梨花 年龄:23 性别:女 生日:1991-02-08
id:3 姓名:王方 年龄:31 性别:女 生日:2009-01-05
id:4 姓名:李林 年龄:23 性别:女 生日:2009-01-05
id:5 姓名:张速 年龄:21 性别:男 生日:2009-01-05
id:6 姓名:赵凌 年龄:25 性别:女 生日:2009-01-05
id:7 姓名:扬名 年龄:25 性别:女 生日:2009-01-05
id:8 姓名:徐鸣 年龄:22 性别:男 生日:1986-01-05
id:9 姓名:王菲 年龄:23 性别:女 生日:1985-01-05
id:10 姓名:高峰 年龄:22 性别:男 生日:1984-01-05
id:11 姓名:孙值 年龄:21 性别:女 生日:1983-01-05
id:12 姓名:蔡瑁 年龄:24 性别:女 生日:1988-01-05
id:15 姓名:Jim 年龄:29 性别:男 生日:1990-06-28
id:21 姓名:ll 年龄:20 性别:男 生日:null
id:17 姓名:Jim 年龄:29 性别:男 生日:1990-06-28
id:22 姓名:zhangsan 年龄:29 性别:男 生日:null
id:23 姓名:wangli 年龄:33 性别:男 生日:null
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《jdbc入门理解-学习javaweb必看》
本文地址:http://www.xiupu.net/archives-152.html
关注公众号:
微信赞赏
支付宝赞赏