您的位置:首页 > 编程语言 > Java开发

0808-JDBC-Java DataBase Connectivity

2017-08-19 16:35 459 查看
JDBC中常用的接口---java.sql包

----------------------------

(1)Connection接口---代表程序和数据库间的连接

(2)Statement接口---代表程序发往数据库的SQL语句

(3)PreparedStatement接口---代表程序发往数据库的SQL语句,性能比Statement更优

(4)ResultSet接口---代表执行查询语句后返回的结果集

PreparedStatement接口

----------------------------


(1)PreparedStatement接口是Statement的子接口,表示预编译的SQL语句对象;

(2)Statement接口:创建语句对象时,不带参数 --> 执行更新或查询方法时,传入完整的SQL语句

   PreparedStatement接口:创建预处理语句对象时,传入带?的SQL语句 --> 执行更新或查询方法时,不带参数

使用PreparedStatement接口完成数据更新操作

----------------------------


    //步骤1---通过反射实例化数据库驱动类

    //Class.forName("完整的数据库驱动类名");  

    Class.forName("com.mysql.jdbc.Driver");  

    //步骤2---调用DriverManager的静态工厂方法获取数据库连接对象

    //Connection conn = DriverManager.getConnection("jdbc:mysql://数据库所在的主机名或IP地址:端口号/数据库名", "连接数据库的用户名", "连接数据库的密码"); 

    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/news", "root", "1");

    //步骤3---准备带?的SQL语句

    String sql = "xxx";

    //步骤4---调用连接对象的工厂方法创建预处理语句对象,传入sql语句

    PreparedStatement pstmt = conn.prepareStatement(sql);     

    //步骤5---调用预处理语句对象的setXXX()方法为SQL语句中的每个?传参

    pstmt.setXXX(参数序号, 参数值);

    //步骤6---调用预处理语句对象的更新方法,返回本次更新所影响的记录行数,行数>0---表示更新成功 行数=0---找不到要更新的数据 行数<0---更新失败

    int rows = pstmt.executeUpdate();    

    //步骤7---关闭预处理语句对象和数据库连接对象

    pstmt.close();

    conn.close();

使用PreparedStatement接口完成数据查询操作

----------------------------


    //步骤1---通过反射实例化数据库驱动类

    //Class.forName("完整的数据库驱动类名");  

    Class.forName("com.mysql.jdbc.Driver");  

    //步骤2---调用DriverManager的静态工厂方法获取数据库连接对象

    //Connection conn = DriverManager.getConnection("jdbc:mysql://数据库所在的主机名或IP地址:端口号/数据库名", "连接数据库的用户名", "连接数据库的密码"); 

    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/news", "root", "1");

    //步骤3---准备带?的SQL语句

    String sql = "xxx";

    //步骤4---调用连接对象的工厂方法创建预处理语句对象,传入sql语句

    PreparedStatement pstmt = conn.prepareStatement(sql);     

    //步骤5---调用预处理语句对象的setXXX()方法为SQL语句中的每个?传参

    pstmt.setXXX(参数序号, 参数值);

    //步骤6---调用预处理语句对象的查询方法,返回结果集对象 

    ResultSet rs = pstmt.executeQuery();    

    //步骤7---使用while循环遍历结果集,调用next()方法将指针移动到下一条记录

    while(rs.next()){
//步骤8---使用结果集对象的getXXX()方法获取当前记录中不同数据类型的字段值

    }

    

    //步骤9---关闭结果集对象,预处理语句对象,数据库连接对象

    rs.close();

    pstmt.close();

    conn.close();

使用PreparedStatement接口

package com.uan.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtil {

private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;

//数据库连接信息
private static String dbDriver = "";
private static String dbUrl = "";
private static String dbUsername = "";
private static String dbPassword = "";

//静态代码块---类加载时读取配置文件的信息
static{

//实例化Properties对象
Properties prop = new Properties();

try {

//加载属性文件
prop.load(JDBCUtil.class.getResourceAsStream("db-config.properties"));

//读取配置
dbDriver = prop.getProperty("dbDriver");
dbUrl = prop.getProperty("dbUrl");
dbUsername = prop.getProperty("dbUsername");
dbPassword = prop.getProperty("dbPassword");

} catch (IOException e) {
e.printStackTrace();
}

}

//单例
private static JDBCUtil instance = new JDBCUtil();
public static JDBCUtil getInstance(){
return instance;
}

//加载驱动类
private JDBCUtil(){

try {
Class.forName(dbDriver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

//打开连接
private void openConnection(){
try {
this.conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
} catch (SQLException e) {
e.printStackTrace();
}
}

//数据更新
public int execUpdate(String sql, Object... params){

this.openConnection();

try {

this.pstmt = this.conn.prepareStatement(sql);

//参数赋值
for(int i=0; i<params.length; i++){
pstmt.setObject(i+1, params[i]);
}

return pstmt.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
return -1;
} finally{
this.closeConnection();
}

}

//数据查询
public ResultSet execQuery(String sql, Object... params){

this.openConnection();

try {

this.pstmt = this.conn.prepareStatement(sql);

//参数赋值
for(int i=0; i<params.length; i++){
pstmt.setObject(i+1, params[i]);
}

rs = pstmt.executeQuery();

return rs;

} catch (SQLException e) {
e.printStackTrace();
return null;
}
}

//关闭连接
public void closeConnection(){

try {

if(this.rs!=null){
this.rs.close();
}

if(this.pstmt!=null){
this.pstmt.close();
}

if(this.conn!=null){
this.conn.close();
}

} catch (SQLException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {

JDBCUtil jdbcUtil = new JDBCUtil();

/*
String sql = "update user set score = ? where userid = ?";

//int rows = jdbcUtil.execUpdate(sql, new Object[]{40, 4});
int rows = jdbcUtil.execUpdate(sql, 44, 4);

if(rows > 0){
System.out.println("更新成功");
}else{
System.out.println("更新失败");
}

*/
String sql = "select * from user";

ResultSet rs = jdbcUtil.execQuery(sql);

try {
while(rs.next()){
System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" + rs.getString(3) + "-" + rs.getInt(4));
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
jdbcUtil.closeConnection();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdbc