首先连接数据库
连接数据库需要两个类
Client类
package org.bwgl;
import java.sql.*;
import java.util.*;
public class Client {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
DBUtils dbUtils = DBUtils.getInstance();
dbUtils.getConnection();
System.out.println("连接成功");
dbUtils.close();
System.out.println("数据库连接关闭");
}
}
DBUtils
package org.bwgl;
import java.sql.*;
import java.util.*;
public class DBUtils {
private static DBUtils dbUtils = null;
private Connection conn = null;
private String url = "jdbc:mysql://localhost:3307/mywebl?user=root&password=12345";//首先确保数据库能够登录,进行操作
private DBUtils() {
super();
// TODO Auto-generated constructor stub
}
public static DBUtils getInstance() throws ClassNotFoundException { //获取单例
if(dbUtils==null) {
dbUtils = new DBUtils();
registerDrever();
}
return dbUtils;
}
private static void registerDrever() throws ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
}
public boolean getConnection() throws SQLException {
conn = DriverManager.getConnection(url); // 建立连接
return conn == null? false : true;
}
public void close() throws SQLException {
if(conn!=null) {
conn.close(); // 关闭连接
}
}
}
连接成功:
插入操作
sql 语句编写
String sql = "insert into users(username,`password`) value(?,?);"; // sql 语句
List params = new ArrayList(); // 用来存储插入数据的数组链表
params.add(0,"kkkk");
params.add(1,"654321");
if(dbUtils.executeUpdate(sql,params)) { // 自定义 执行更新表的SQL语句 的方法
System.out.println("更新成功");
}else {
System.out.println("更新失败");
}
实现自定义方法executeUpdate
public boolean executeUpdate(String sql,List params) throws SQLException {
ps = conn.prepareStatement(sql); // ps 定义在顶部
if(params!=null && !params.isEmpty()) {
int count = params.size();
for(int i = 0; i < count; i++) {
ps.setObject(i + 1, params.get(i)); // 第一个参数表示插入的是第一个问号,因为下标从0开始所以i + 1;
}
}
int temp = ps.executeUpdate(); // 更新次数
return temp > 0?true : false; // 有更新次数代表成功 反之失败
}
查看数据库
插入成功
查询
写SQL
List<Map<String,Object>> results = null; // 将查询到的结果用Map存起来放到一个List里面去
sql = "select * from users";
params = null; // 重置查询用到的params 避免数据冲突
results = dbUtils.executeQuery(sql, params); //自定义 执行查询表的SQL语句 的方法
for(Map<String,Object> map : results) { // 遍历所有查到的结果
Set<String> keys = map.keySet();
for(String columnName : keys) {
System.out.print(columnName + "=" + map.get(columnName) + "\t");
}
System.out.println();
}
实现自定义方法executeQuery
public List<Map<String, Object>> executeQuery(String sql, List params) throws SQLException {
List<Map<String,Object>> result = new ArrayList<Map<String, Object>>();
ps = conn.prepareStatement(sql); // 预编译 sql 语句 ,防止sql注入,提高性能
if(params!=null && !params.isEmpty()) {
int count = 0;params.size();
for(int i = 0; i < count; i++) {
ps.setObject(i + 1, params.get(i)); // setObject(key,value)key是整数1、2、3、4等,它表示第几个问号
} // value 代表第几个问好的值
}
rs = ps.executeQuery(); // rs 在顶上定义
while (rs.next()) {
ResultSetMetaData meta = rs.getMetaData(); // getMetaData 返回表的字段信息 ResuSM 接受它
int ccount = meta.getColumnCount(); // 返回字段数目
Map<String,Object> map = new HashMap<String,Object>(); // 存储查到的内容
for(int i = 0; i < ccount; i ++ ) {
String columnName = meta.getColumnName(i+1);
map.put(columnName, rs.getObject(columnName));
}
result.add(map);
}
return result;
}