JDBC
1.JDBC概述
-
在JAVA中,数据库存取技术分为如下
- JDBC直接访问数据库
- JDO(Java Data Object)技术
- 第三方O/R工具,如:Hibernate、Mybasic等
-
JDBC是Java访问数据库的基石,JDO等只是更好的封装了JDBC
-
JDBC——Java Database Connectivity,独立于数据库管理系统,公共的接口。
-
面向应用的API——对于程序员来讲
-
面向数据库的API——对于厂商
JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。
不同的教据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。
——面向接口编程
1.1 获取连接
//方式一
Driver driver = new com.mysql.jdbc.Driver();
String url="jdbc:mysql://localhost/3306/test";
//将用户名和密码封装在Properties中
Properties info=new Properties();
info.setProperty("user","root");
info.setProperty("password","root123");
Connection conn =driver.connect(url,info);
//方式二:对方式一的迭代
//获取Driver实现类的对象,使用反射。日呦,没学过
Class clazz=Class.forname("com.mysql.jdbc.Driver()");
Driver driver=(Driver) clazz.newInstance;
//方式三:使用DriverManager替换Driver
//提供驱动
Class clazz=Class.forname("com.mysql.jdbc.Driver()");
Driver driver=(Driver) clazz.newInstance;
//提供基本信息
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";
DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);
//方式四:在三的基础上进行优化
//加载驱动,同时对驱动器进行注册
Class.forname("com.mysql.jdbc.Driver()")
//加载驱动其实也可以省略,但不推荐省略。仅在Mysql中可以省略。
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";
DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);
//方式五
1.2 Statement
- Statement:用于执行静态SQL语句并返回它所产生的结果的对象
- PreparedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象高效地执行该语句
- CallableStatement:用于执行SQL存储过程
- Statement几乎不在使用,使用PreparedStatement。
使用PreparedStatement替换Statement,以防止SQL注入。
Class.forname("com.mysql.jdbc.Driver()")
String url="jdbc:mysql://localhost/3306/test";
String user="root";
String password="root123";
DriverManager.registerDriver(driver);
Connection comm =DriverManager.getConnection(url,user,password);
//编写SQL语句,使用?作为占位符
String sql = "INSERT INTO user VALUES(?,?,?))";
PreparedStatement ps =comn.preparedStatement(sql);
//为占位符赋值
//index,为第几个?赋值,此时的下标从1开始。value为值。根据值的类型填写set的类型。
ps.setXXX(index,value);
//执行。返回一个int类型的数,成功则返回1.
ps.execute();
//关闭资源
ps.close();
comm.close();
可以对连接和资源的关闭进行封装。定义为一个工具类
public class MysqlUtil {
static final String DRIVE= "com.mysql.jdbc.Driver";
static final String URL ="jdbc:mysql://127.0.0.1:3307/boerk";
static final String USERNAME ="root";
static final String USERPWD ="root123";
static Connection connection=null;
public static Connection getConnection() {
try {
Class.forName(DRIVE);
connection = DriverManager.getConnection(URL, USERNAME, USERPWD);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public static void close(PreparedStatement preparedStatement,Connection connection){
try{
preparedStatement.close();
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
对相同的内容进行封装,变为一个增删改通用模板。
//使用不定形参数组进行接收占位符。
public void testUpdate(String sql,Object... args) throws SQLException {
Connection connection = MysqlUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i+1,args[i]);
}
MysqlUtil.close(preparedStatement,connection);
}
使用PreparedStatement进行查询
Connection conn= MysqlUtil.getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
//执行并返回结果集
ResultSet resultSet = ps.executeQuery();
- resultSet.next()方法,判断结果集下一条是否有数据,有则返回true,并指针下移
ResultSet resultSet = ps.executeQuery();
if(resultSet.next()){
//通过resultSet的get方法获得对应字段的值,xxx为字段的数据类型
resultSet.getxxx(1);
resultSet.getxxx(2);
resultSet.getxxx(3);
}
- ORM思想(Object relationship mapping)
- 表中的一列记录对应JAVA里的一个对象。
- 表中的一个字段对应JAVA里的一个属性。
- 查询时将数据封装为一个对象。

浙公网安备 33010602011771号