JDBC连接MySql数据库
JDBC是由Sun公司为简化Java程序访问数据库二指定的一套面向对象的应用程序接口。JDBC不能直接访问数据库,必须依赖于数据库厂商提供的JDBC驱动程序实现对底层数据库的操作。
在数据库建立连接与访问时,一定记住先获得驱动器类库(jar包),并将其添加到项目中。
连接数据库的步骤如下:
1、加载MySql驱动
Class.forName(“com.mysql.jdbc.Driver”);
2、建立与数据库的连接
Connection conn=DriverManager.getConnection(url,user,password);
3、创建PrepareStatement对象
PrepareStatement ps=conn.prepareStatement(sql);
4、执行sql语句
ps.executeUpdate();/ps.executeQuery();
具体代码的如下:
DBHelper.java类 实现连接数据库的封装 代码如下:
package com.hnjtg.dao;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class DBHelper {
static Properties pro=new Properties();
private static String driver;
private static String url;
private static String uname;
private static String pwd;
private static void init() {
InputStream is=DBHelper.class.getClassLoader().getResourceAsStream("db.properties");
try {
pro.load(is);
//从配置文件中获取信息
driver=pro.getProperty("driver");
url=pro.getProperty("url");
uname=pro.getProperty("username");
pwd=pro.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
static{
//初始化 从配置文件中获取参数
init();
try {
//1、加载驱动只要执行一次就行了,并且,会在第一位执行
//静态块 只要执行一次 并且自动执行 并且 在第一位执行
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
protected Connection conn;
//获取连接对象
public Connection getConnection(){
try {
if(conn==null || conn.isClosed()){
conn=DriverManager.getConnection(url, uname, pwd);
}
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//查询的封装 如select的sql语句
public List<Map<String,String>> findAll(String sql,List<Object> params){
List<Map<String,String>> list=new ArrayList<Map<String,String>>();
conn=getConnection();
try {
PreparedStatement ps=conn.prepareStatement(sql);
//这个方法是获取传过来的参数 并将它添加至PreparedStatement对象中
Params(ps,params);
//查数据 获得结果集
ResultSet rs=ps.executeQuery();
//获取到查询的这个表的列字段
ResultSetMetaData rsmd=rs.getMetaData();
String[] column=new String[rsmd.getColumnCount()];
//循环赋值
for(int i=0;i<rsmd.getColumnCount();i++){
//将在表格里查询的每个字段的字段名存到数组column中
column[i]=rsmd.getColumnName(i+1);
}
//再根据键取值存下来
while(rs.next()){
Map<String,String> map=new HashMap<String,String>();
for(int j=0;j<column.length;j++){
//得到字段名 即键
String key=column[j];
//根据键得到值
String value=rs.getString(key);
//再把键值存到Map中
map.put(key.toLowerCase(), value);
}
//将Map添加到List中
list.add(map);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
//增删改的封装 如insert、delete、update的sql语句
public int upDate(String sql,List<Object> params){
int result=0;
conn=getConnection();
try {
//创建PreparedStatement对象
PreparedStatement ps=conn.prepareStatement(sql);
Params(ps,params);
//执行sql语句
result=ps.executeUpdate();
//关闭资源
closeAll(conn,ps,null);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
//获取参数
private void Params(PreparedStatement ps, List<Object> params) {
if(params!=null && params.size()>0){
//循环获取参数
for(int i=0;i<params.size();i++){
//得到参数
Object o=params.get(i);
//把值添加进PreparedStatement对象
try {
ps.setObject(i+1, o);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//关闭数据库的连接
public void closeAll(Connection conn,PreparedStatement stst,ResultSet rs){
try {
//关闭连接
if(conn!=null){
conn.close();
}
//关闭Statement对象
if(stst!=null){
stst.close();
}
//关闭结果集
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
db.properties 配置文件,配置文件在src目录下 如下:
driver=com.mysql.jdbc.Driver //MySql的JDBC的驱动
url=jdbc:mysql://localhost:3306/schools //连接到数据库的URL
username=root //用户名
password=a //密码