今天学习了一下JDBC,作为一个初学者,只是初步的了解了一下JDBC。
JDBC API提供了以下接口和类:
DriverManager: 这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。
Driver: 此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息
Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。
Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让您可以通过移动它的数据。
SQLException: 这个类处理发生在一个数据库应用程序的任何错误。
JDBC的一般执行步骤:
导入数据包: 要求包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用
importjava.sql.* 就可以了。
注册JDBC驱动程序:要求初始化驱动程序,使它可以与数据库打开一个通信通道。
Class.forName(“com.mysql.jdbc.Driver”);
打开一个连接:要求中使用DriverManager.getConnection()方法创建一个Connection对象,它代表与数据库服务器的物理连接。
Connection conn = DriverManager.getConnection(String url);
创建Statement对象: 通过Statement对象将SQL语句提交到数据库。
stmt = conn.createStatement();
执行操作: INSERT,DELETE,UPDATE,SELECT等
String sql = “INSERT INTO USERINFO VALUES()”;
stmt.executeUpdate(sql);
清理环境:需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。
stmt.close();
conn.close();
- 关于executeQuery()和executeUpdate()方法的区别
a. executeQuery()主要用来执行 SELECT语句, 产生单个结果集:ResultSet rs;
b.executeUpdate()主要用来执行INSERT,DELETE,UPDATE和SQL DLL(数据定义语言)语句.
执行insert,delete,update时返回受影响的行数
执行CREATE TABLE,DROP TABLE等不操作行的语句时,返回0; - 占位符的使用
package com.study.dao;
//导入数据包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTest
{
public static void main(String[] args) throws SQLException
{
Statement stmt = null;
Connection conn = null;
try
{
//注册jdbc驱动程序
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test2?"
+ "user=root&password=root&useUnicode=true&characterEncoding=UTF8";
conn = DriverManager.getConnection(url);//打开一个链接
stmt = conn.createStatement();
//String sql = "DROP TABLE REGISTRATION ";//因为之前表存在所以先删除这张表
//stmt.executeUpdate(sql);
String sql = "CREATE TABLE REGISTRATION " + "(id INTEGER not NULL, " + " first VARCHAR(255), "
+ " last VARCHAR(255), " + " age INTEGER, " + " PRIMARY KEY ( id ))";
stmt.executeUpdate(sql);//创建一张Registration表
sql = "INSERT INTO REGISTRATION VALUES(?, ?, ?, ?)";//? 占位
PreparedStatement pstm=conn.prepareStatement(sql);
for ( int i = 0; i < 10; i++ )
{
pstm.setInt(1, i + 1);
pstm.setString(2, "wang"+i);
pstm.setString(3, "xiaoming"+i);
pstm.setInt(4, 12+i);
pstm.executeUpdate();
}
pstm.close();
stmt.close();
conn.close();
}
catch (SQLException se)
{
// Handle errors for JDBC
se.printStackTrace();
}
catch (Exception e)
{
// Handle errors for Class.forName
e.printStackTrace();
}
finally
{
// finally block used to close resources
try
{
if (stmt != null)
stmt.close();
}
catch (SQLException se)
{
} // do nothing
try
{
if (conn != null)
conn.close();
}
catch (SQLException se)
{
se.printStackTrace();
} // end finally try
} // end try
}
}
- 异常处理
驱动加载错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
在WebConnect->WEB-INF->lib路径下加入mysql-connector-java-5.1.7-bin.jar包
未完待续。。。
(若有什么不对的地方欢迎批评教育,谢。)
参考文章:https://www.douban.com/note/247653686/
推荐学习:http://www.yiibai.com/jdbc/jdbc-insert-records.html