本文實例講述了java使用JDBC動態(tài)創(chuàng)建數(shù)據(jù)表及SQL預(yù)處理的方法。分享給大家供大家參考,具體如下:
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、土默特右旗ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的土默特右旗網(wǎng)站制作公司
這兩天由于公司的需求,客戶需要自定義數(shù)據(jù)表的字段,導(dǎo)致每張表的字段都不是固定的而且很難有一個通用的模板去維護(hù),所以就使用JDBC動態(tài)去創(chuàng)建數(shù)據(jù)表,然后通過表的字段動態(tài)添加數(shù)據(jù),數(shù)據(jù)的來源主要是用戶提供的Excel直接導(dǎo)入到數(shù)據(jù)庫中。
如果考慮到字段的類型,可以通過反射的機制去獲取,現(xiàn)在主要用戶需求就是將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫提供查詢功能,不能修改,所以就直接都使用String類型來處理數(shù)據(jù)更加便捷。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; public class DataBaseSql { //配置文件 讀取jdbc的配置文件 private static ResourceBundle bundle = PropertyResourceBundle.getBundle("db"); private static Connection conn; private static PreparedStatement ps; /** * 創(chuàng)建表 * @param tabName 表名稱 * @param tab_fields 表字段 */ public static void createTable(String tabName,String[] tab_fields) { conn = getConnection(); // 首先要獲取連接,即連接到數(shù)據(jù)庫 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 ;iqueryForPage(String tabName,int pageNo,int pageSize ,String[] tab_fields){ conn = getConnection(); // 首先要獲取連接,即連接到數(shù)據(jù)庫 List list = new ArrayList (); try { String sql = "select * from "+tabName+" LIMIT ?,? ; "; System.out.println("查詢sql:"+sql); //預(yù)處理SQL 防止注入 ps = conn.prepareStatement(sql); //注入?yún)?shù) ps.setInt(1,pageNo); ps.setInt(2,pageSize); //查詢結(jié)果集 ResultSet rs = ps.executeQuery(); //存放結(jié)果集 while(rs.next()){ String[] result = new String[tab_fields.length]; for (int i = 0; i < tab_fields.length; i++) { result[i] = rs.getString(tab_fields[i]); } list.add(result); } //關(guān)閉流 rs.close(); ps.close(); conn.close(); //關(guān)閉數(shù)據(jù)庫連接 } catch (SQLException e) { System.out.println("查詢失敗" + e.getMessage()); } return list; } /** * 清空表數(shù)據(jù) * @param tabName 表名稱 */ public static void delete(String tabName){ conn = getConnection(); // 首先要獲取連接,即連接到數(shù)據(jù)庫 try { String sql = "delete from "+tabName+";"; System.out.println("刪除數(shù)據(jù)的sql:"+sql); //預(yù)處理SQL 防止注入 ps = conn.prepareStatement(sql); //執(zhí)行 ps.executeUpdate(); //關(guān)閉流 ps.close(); conn.close(); //關(guān)閉數(shù)據(jù)庫連接 } catch (SQLException e) { System.out.println("刪除數(shù)據(jù)失敗" + e.getMessage()); } } /** * 用于注入?yún)?shù) * @param ps * @param data * @throws SQLException */ private static void excutePs(String sql,int length,String[] data) throws SQLException{ //預(yù)處理SQL 防止注入 ps = conn.prepareStatement(sql); //注入?yún)?shù) for(int i=0;i
數(shù)據(jù)庫的配置文件 db.properties
db.username=root db.password=root db.classname=com.mysql.jdbc.Driver db.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java+MySQL數(shù)據(jù)庫程序設(shè)計總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。