Java连接数据库
Java连接数据库
火力全開 发表于1年前
Java连接数据库
  • 发表于 1年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

创建一个以JDBC连接数据库的程序,包含7个步骤:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
例如:

try{   
	//加载MySql的驱动类   
	Class.forName("com.mysql.jdbc.Driver") ;   
}catch(ClassNotFoundException e){   
	System.out.println("找不到驱动程序类 ,加载驱动失败!");   
	e.printStackTrace();  
}

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

• 连接URL定义了连接数据库时的协议、子协议、数据源标识。
• 书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例如:

//连接MySql数据库,用户名和密码都是root   
String url = "jdbc:mysql://localhost:3306/test" ;    
String username = "root" ;   
String password = "root" ;   
try{   
	Connection con =    
	DriverManager.getConnection(url , username , password ) ;   
}catch(SQLException se){   
	System.out.println("数据库连接失败!");   
	se.printStackTrace() ;   
}

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:

Statement stmt = con.createStatement() ;   
PreparedStatement pstmt = con.prepareStatement(sql) ;   
CallableStatement cstmt =    
con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
int rows = stmt.executeUpdate("INSERT INTO ...") ;   
boolean flag = stmt.execute(String sql) ;

6、处理结果

两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){   
	String name = rs.getString("name") ;   
	String pass = rs.getString(1) ; // 此方法比较高效   
}
(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象


if(rs != null){   // 关闭记录集   
	try{   
		rs.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(stmt != null){   // 关闭声明   
	try{   
		stmt.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(conn != null){  // 关闭连接对象   
	try{   
		conn.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}


---------------------------------分割线---------------------------------

一、如何通过JDBC访问数据库

JDBC:Java DataBase Connectivity数据库连接用于在java程序中实现操作数据库。一般步骤如下:

加载JDBC驱动器。将数据库的JDBC驱动加载到classPath,web工程的一般放大WEB-INF/lib/下,java工程项目的则用build path将jar包导进去。
加载JDBC驱动,并将其注册到DriverManager中,一般使用反射Class.forName(String driveName).
简历数据库连接,取得Connection对象。一般通过Driver.getConnection(url,username,password)方法实现。
建立Statement对象或是PreparedStatement对象。
执行SQL语句
访问结果集ResultSet
依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。
实例代码如下:

首先创建一张表:

create tabel Employee(
	id int primarykey,
	name varchar(20),
	age int
);

示例程序:

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
	 
		String user = "user1";
		String password = "pwd";
		String url = "jdbc:mysql://127.0.0.1:3306/Test";
		String driver = "com.mysql.jdbc.Driver";
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			stmt=con.createStatement();
			stmt.execute("insert into Employee values(1,'James1',36)");
			rs=stmt.executeQuery("select * from Employee");
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null) rs.close();
				if(stmt!=null) stmt.close();
				if(con!=null) con.close();
				 
			}catch(SQLException =e){
				System.out.println("fe:"+e.getMessage());
			}
		}
	}
}

二、Statement、PreparedStatement和CallableStatement的区别

Statement一般用于执行不带参数的SQL语句,并返回生成的结果,每次执行SQL语句时,数据库都要编译该SQL语句。
PerparedStatement表示 与的SQL语句对象,用于执行带参数的SQL语句。效率高、安全性好、代码可读性和可维护性好。(推荐使用)
CallableStatement用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。
举例说明PreparedStatement:

 

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
		String user="user1";
		String password="pwd";
		String url="jdbc:mysql://127.0.0.1:3306/Test";
		String driver="com.mysql.jdbc.Driver";
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			ps=con.preparedStatement("select * from Emloyee where id=?");
			ps.setInt(1,1);
			rs=ps.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null)rs.close();
				if(ps!=null)ps.close();
				if(con!=null)con.close();
			}catch(SQLException fe){
				System.out.println("fe:"+fe.getMessage());
			}
		}
	}
}

三、getString()方法和getObject()方法有什么区别

在数据量很大的时候直接调用ResultSet方法的getString、getInt、getData方法会抛出异常:OrcaleException。此时应该使用getObject方法。因为其他方法会将查询结果都加载到内存中,如果数据量超过内存上限,则会导致异常。

四、JDBC与Hibernate有什么区别

Hibernate是JDBC的封装。采用配置文件的形式将数据库连接参数写到XML文件中。(下次再研究Hibernate)

package com.test;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author Hongten</br>
 * @date 2012-7-16
 *
 */
public class JDBCTest {
    public static void main(String[] args) {
        String driver = "com.mysql.jdbc.Driver";
        String dbName = "spring";
        String passwrod = "root";
        String userName = "root";
        String url = "jdbc:mysql://localhost:3308/" + dbName;
        String sql = "select * from users";
 
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, userName,
                    passwrod);
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id : " + rs.getInt(1) + " name : "
                        + rs.getString(2) + " password : " + rs.getString(3));
            }
 
            // 关闭记录集
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭声明
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭链接对象
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

 

原文链接

Java数据库操作
完整java开发中JDBC连接数据库代码和步骤

  • 点赞
  • 收藏
  • 分享
粉丝 15
博文 164
码字总数 15911