Java连接数据库
1. 需要的工具
- jar包:mysql-connector-java-5.1.18-bin.jar或者sqljdbc4.jar、c3p0-0.9.1.2.jar(连接池jar包可选)
- 数据库:SQL Server或者MySQL
2. 链接数据库必备代码
- 链接的是 SQL Server
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=test;";
conn = DriverManager.getConnection(url ,"sa","12345");
- 链接的是 MySQL
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8;";
其中
useUnicode=true表示是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true
characterEncoding=UTF-8表示当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk
最好添加这两个参数的原因
如果你的数据库安装时用的是gbk编码,而你项目数据库要用到的是utf-8编码,为了避免服务端与数据库之间传输的数据乱码,最好加上这两个参数。
添加这两参数后的作用
1、存数据时,数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
2、取数据时,在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
3. 代码案例
初学者最基础的jdbc连接
package JDBC_Test;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class Test {
public static void main(String[] args) {
Connection conn;
Statement stmt;
ResultSet rs;
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=test;";
String sql = "select * from student";
try {
// 连接数据库
conn = DriverManager.getConnection(url, "sa", "12345");
// 建立Statement对象
stmt = conn.createStatement();
/**
* Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
*/
// 执行数据库查询语句
rs = stmt.executeQuery(sql);
/**
* ResultSet executeQuery(String sql) throws SQLException 执行给定的 SQL
* 语句,该语句返回单个 ResultSet 对象
*/
while (rs.next()) {
int id = rs.getInt("Sno");
String name = rs.getString("Sname");
int age = rs.getInt("Sage");
System.out.println("Sno:" + id + "\tSame:" + name + "\tSage:" + age);
}
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
}
等打怪升级提升后,便可使用一些工具类来方便自己,以下是配合c3p0一起使用
package com.Server.utils;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.Server.exception.LoginSQLException;
/**
* 工具类
*/
public class jdbcUtils {
//数据库连接池,C3P0
public static javax.sql.DataSource dataSource=null;
public static final String DRIVER_NAME="com.mysql.jdbc.Driver";
public static final String USERNAME="root";
public static final String PASSWORD="123456";
public static final String URL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
static {//静态代码只会被执行一次
try{
// dataSource= new ComboPooledDataSource("mysql");
ComboPooledDataSource pool= new ComboPooledDataSource();
pool.setDriverClass(DRIVER_NAME);
pool.setUser(USERNAME);
pool.setPassword(PASSWORD);
pool.setJdbcUrl(URL);
pool.setMaxPoolSize(30);
pool.setMinPoolSize(5);
pool.setAcquireIncrement(3);//若数据库中的连接数量不足的时候,向数据库申请的连接数量
pool.setCheckoutTimeout(10*1000);//当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 SQLException
pool.setAcquireRetryAttempts(10); //连接池在获得新连接失败时重试的次数,如果小于等于0则无限重试直至连接获得成功。default : 30
dataSource=pool;
}catch(Exception e){
System.out.println("数据连接池加载失败");
try {
throw new LoginSQLException(e);
} catch (LoginSQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
/**
* 获取到数据库mysql的数据连接对象conn
* @return
*/
public static Connection getConnection()throws LoginSQLException, SQLException{
return dataSource.getConnection();
}
/**
* 通用的关闭数据库连接对象
*/
public static void CloseConn(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
public static void rollbackTransation(Connection conn){
if(conn!=null){
try {
conn.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
然后使用以下代码便可以获取到连接
Connection conn = jdbcUtils.getConnection();
这篇博客主要是为了整理自己大一到大三编程中遇到的坑进而被收藏学习的博客
参考学习
Java连接Sql Server 2008的简单数据库应用
Mysql JDBC Url参数说明useUnicode=true&characterEncoding=UTF-8
mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用