import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TableUtil {
private static Connection conn;
private static PreparedStatement ps;
/* 获取数据库连接的函数*/
private static Connection getConnection() {
Connection con = null; //创建用于连接数据库的Connection对象
String driverClassName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/szh?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";
String username = "root";
String password = "";
try {
Class.forName(driverClassName);
con = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
System.out.println("数据库连接失败" + e.getMessage());
}
return con;
}
/**
* 创建表
* @param tabName 表名称
* @param tab_fields 表字段
*/
public static void createTable(String tabName,String[] tab_fields) {
conn = getConnection(); // 首先要获取连接,即连接到数据库
try {
String sql = "create table "+tabName+"(id int auto_increment primary key not null";
if(tab_fields!=null&&tab_fields.length>0){
sql+=",";
int length = tab_fields.length;
for(int i =0 ;i<length;i++){
//添加字段
sql+=tab_fields[i].trim()+" varchar(50)";
//防止最后一个,
if(i<length-1){
sql+=",";
}
}
}
//拼凑完 建表语句 设置默认字符集
sql+=")DEFAULT CHARSET=utf8;";
//System.out.println("建表语句是:"+sql);
ps = conn.prepareStatement(sql);
ps.executeUpdate(sql);
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("建表失败" + e.getMessage());
}
}
/**
* 添加数据
* @param tabName 表名
* @param fields 参数字段
* @param data 参数字段数据
*/
public static void insert(String tabName,String[] fields,String[] data) {
conn = getConnection(); // 首先要获取连接,即连接到数据库
try {
String sql = "insert into "+tabName+"(";
int length = fields.length;
for(int i=0;i<length;i++){
sql+=fields[i];
//防止最后一个,
if(i<length-1){
sql+=",";
}
}
sql+=") values(";
for(int i=0;i<length;i++){
sql+="?";
//防止最后一个,
if(i<length-1){
sql+=",";
}
}
sql+=");";
//System.out.println("添加数据的sql:"+sql);
//预处理SQL 防止注入
excutePs(sql,length,data);
//执行
ps.executeUpdate();
//关闭流
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("添加数据失败" + e.getMessage());
}
}
/**
* 替换添加数据
* @param tabName 表名
* @param fields 参数字段
* @param data 参数字段数据
*/
public static void replaceInto(String tabName,String[] fields,String[] data) {
conn = getConnection(); // 首先要获取连接,即连接到数据库
try {
String sql = "replace into "+tabName+"(";
int length = fields.length;
for(int i=0;i<length;i++){
sql+=fields[i];
//防止最后一个,
if(i<length-1){
sql+=",";
}
}
sql+=") values(";
for(int i=0;i<length;i++){
sql+="?";
//防止最后一个,
if(i<length-1){
sql+=",";
}
}
sql+=");";
//System.out.println("添加数据的sql:"+sql);
//预处理SQL 防止注入
excutePs(sql,length,data);
//执行
ps.executeUpdate();
//关闭流
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("替换数据失败" + e.getMessage());
}
}
/**
* 查询表 【查询结果的顺序要和数据库字段的顺序一致】
* @param tabName 表名
* @param fields 参数字段
* @param data 参数字段数据
* @param tab_fields 数据库的字段
*/
public static String query(String tabName,String[] fields,String[] data,String[] tab_fields){
conn = getConnection(); // 首先要获取连接,即连接到数据库
String str = "";
try {
String sql = "select * from "+tabName+" where ";
int length = fields.length;
for(int i=0;i<length;i++){
sql+=fields[i]+" = ? ";
//防止最后一个,
if(i<length-1){
sql+=" and ";
}
}
sql+=";";
//System.out.println("查询sql:"+sql);
//预处理SQL 防止注入
excutePs(sql,length,data);
//查询结果集
ResultSet rs = ps.executeQuery();
//存放结果集
while(rs.next()){
for (int j = 0; j < tab_fields.length; j++){
str += rs.getString(tab_fields[j]) + ",";
}
}
//关闭流
rs.close();
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("查询失败" + e.getMessage());
}
return str;
}
/**
* 查询表 【查询有多少行 符合条件的】
* @param tabName 表名
* @param fields 参数字段
* @param data 参数字段数据
*/
public static int getCount(String tabName,String[] fields,String[] data){
conn = getConnection(); // 首先要获取连接,即连接到数据库
int num = 0;
try {
String sql = "select count(*) from "+tabName+" where ";
int length = fields.length;
for(int i=0;i<length;i++){
sql+=fields[i]+" = ? ";
//防止最后一个,
if(i<length-1){
sql+=" and ";
}
}
sql+=";";
//System.out.println("查询sql:"+sql);
//预处理SQL 防止注入
excutePs(sql,length,data);
//查询结果集
ResultSet rs = ps.executeQuery();
//存放结果集
while(rs.next()){
num = rs.getInt(1);
}
//关闭流
rs.close();
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("查询失败" + e.getMessage());
}
return num;
}
/**
* 用于注入参数
* @param ps
* @param data
* @throws SQLException
*/
private static void excutePs(String sql,int length,String[] data) throws SQLException{
//预处理SQL 防止注入
ps = conn.prepareStatement(sql);
//注入参数
for(int i=0;i<length;i++){
ps.setString(i+1,data[i]);
}
}
/**
* 清空表数据
* @param tabName 表名称
*/
public static void delete(String tabName, String[] id){
conn = getConnection(); // 首先要获取连接,即连接到数据库
try {
String sql = "delete from "+tabName+" where id = ? ;";
//System.out.println("删除数据的sql:"+sql);
//预处理SQL 防止注入
excutePs(sql,1,id);
//执行
ps.executeUpdate();
//关闭流
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("删除数据失败" + e.getMessage());
}
}
/**
* 判断表是否存在
* @param tabName
* @return
*/
public static boolean exitTable(String tabName){
boolean flag = false;
conn = getConnection(); // 首先要获取连接,即连接到数据库
try {
String sql = "select id from "+tabName+";";
//预处理SQL 防止注入
ps = conn.prepareStatement(sql);
//执行
flag = ps.execute();
//关闭流
ps.close();
conn.close(); //关闭数据库连接
} catch (SQLException e) {
System.out.println("判断表是否存在失败" + e.getMessage());
}
return flag;
}
}
参考:
http://blog.csdn.net/lovelong8808/article/details/44077521
动态创建表
最新推荐文章于 2022-04-14 15:45:20 发布