JDBC(Java Data BaseConnectivity ,java数据库连接)是一种用于执行SQL语句的JAVA API,,它由一组用Java语言编写的类和接口组成。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。我们通过JDBC统一操作SyBase数据库,Oracle数据库,Informix数据库,我们不必为程序换了数据库而重新编写程序,符合JAVA语言“编写一次,处处运行的”优势。
JDBC只做三件事:与数据库建立连接、发送操作数据库的语句,并处理结果。
与数据库建立连接有两种方式
- Jdbc.properties文件
代码中获得配置文件中的信息:
privatestatic final String DRIVERCLASS=ResourceBundle.getBundle("jdbc").getString("DRIVERCLASS");
privatestatic final String URL =ResourceBundle.getBundle("jdbc").getString("URL");privatestatic final String USERNAME=ResourceBundle.getBundle("jdbc").getString("USERNAME");
privatestatic final String PASSWORD=ResourceBundle.getBundle("jdbc").getString("PASSWORD");
//注册
Class.forName(DRIVERCLASS);
// 获取连接
Connectioncon = DriverManager.getConnection(URL, USERNAME, PASSWORD);
- 代码
//注册成功
DriverManager.registerDriver(newDriver());
//获取数据连接
Stringurl = "jdbc:mysql://localhost:3306/day17";
Stringusername = "root";
Stringpassword = "mysql";
Connectioncon = DriverManager.getConnection(url, username, password);
发送操作数据库的语句
- 有sql注入的弊端
//通过连接对象获取一个可以操作sql的statement对象
Statementst = con.createStatement();
//执行时sql语句
String sql = "select * from user
whereusername='"+ username + "' and password='" + password +"'"
ResultSet rs = st.executeQuery(sql);//执行sql语句
- 成功避免了sql注入的弊端
Stringsql = "select * from user where username=? and password=?";
//获取操作sql语句对象
PreparedStatementpst = con.prepareStatement(sql);//将sql语句进行预加载
ResultSet rs =pst.executeQuery();//执行sql语句
//需要对占位符进行传参
pst.setString(1,username);// 对其中的占位符进行填充
pst.setString(2,password);// 对其中的占位符进行填充
对结果的处理
增删改的结果都是影响的行数,通过判断行数的大小,判断执行是否成功。
查询的结果集是 ResultSet
//操作结果集
if(rs.next()) {
Useruser = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
returnuser;
}
在学习JDBC的过程中,我一直想起ODBC,两者虽然面向的IDE不同,但原理都相同。ODBC可以封装成SQLHelper,JDBC应该也可以。