使用JDBC 插入向数据库插入对象
package com.ctl.util; import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.print.attribute.standard.Media; import com.ctl.bean.Person;
import com.mysql.jdbc.Statement; /**
*
* @author Administrator
* @category */
public class DButils {
private static String driver;
private static String url;
private static String username;
private static String password;
private static Connection conn;
private static ThreadLocal<Connection> connHolder = new ThreadLocal<Connection>();
static {
driver = ConfigUtils.getType("mysql.driver");
url = ConfigUtils.getType("mysql.url");
username = ConfigUtils.getType("mysql.username");
password = ConfigUtils.getType("mysql.password");
try {
Runtime.getRuntime().exec("net start mysql");
} catch (IOException e) {
e.printStackTrace();
}
} /**
*
* @return Connection
* @throws SQLException
* @throws ClassNotFoundException
*/
public static Connection getConnection() throws SQLException,
ClassNotFoundException {
conn = connHolder.get();
if (conn == null || conn.isClosed()) {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false);
connHolder.set(conn);
}
return conn;
} /**
* @category 依据sql得到记录总数
* @param sql
* @return 假设返回-1代表出错
*/
public static int getCount(String sql) {
try {
ResultSet rs = getConnection().createStatement().executeQuery(sql);
if (rs.next()) {
return rs.getInt(1);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1; } /**
* @category close Connection
* @throws SQLException
*/
public static void close() throws SQLException {
conn.close();
connHolder.set(null);
} public static int createTable(Class c) {
String tableName = c.getSimpleName().toLowerCase();// person
return 0; } /*
* public static void insertEntity(Class c, Object o) {
* System.out.println(o); Object fileds[] = o.toString().split("__"); int
* fieldSize = fileds.length; System.out.println(fieldSize); String
* tableName = c.getSimpleName().toLowerCase();// person // String
* className=c.getSimpleName();//Person int bookIsExis = getCount(
* "SELECT count(table_name) FROM information_schema.TABLES WHERE table_name='"
* + tableName + "' "); if (bookIsExis < 1) { System.out.println("表不存在");
* return; } StringBuffer sql = new StringBuffer("insert into " + tableName
* + " values("); for (int i = 0; i < fieldSize; i++) { sql.append("? ,"); }
* sql.deleteCharAt(sql.length() - 1); sql.append(")");
* System.out.println(sql); PreparedStatement ps; try { ps =
* getConnection().prepareStatement(sql.toString()); for (int i = 0; i <
* fieldSize; i++) { if (fileds[i] != null && !"".equals(fileds[i]) &&
* !"null".equals(fileds[i])) { ps.setObject(i + 1, fileds[i]); } else {
* ps.setObject(i + 1, null); } } ps.executeUpdate();
* getConnection().commit(); } catch (Exception e) { e.printStackTrace(); }
*
* }
*/
public static void insertEntity(Class c, Object obj) {
// System.out.println("1");
if (obj == null || c.getSimpleName().equals(obj.getClass().getName()))
return;
Field[] fields = obj.getClass().getDeclaredFields();
int fieldSize = fields.length;
String tableName = c.getSimpleName().toLowerCase();// person
String[] types1 = { "int", "java.lang.String", "boolean", "char",
"float", "double", "long", "short", "byte" };
String[] types2 = { "Integer", "java.lang.String", "java.lang.Boolean",
"java.lang.Character", "java.lang.Float", "java.lang.Double",
"java.lang.Long", "java.lang.Short", "java.lang.Byte" }; StringBuffer sql = new StringBuffer("insert into " + tableName
+ " values(");
for (int i = 0; i < fieldSize; i++) {
sql.append("?,");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
System.out.println(sql);
PreparedStatement ps = null;
try {
ps = getConnection().prepareStatement(sql.toString());
for (int j = 0; j < fieldSize; j++) {
fields[j].setAccessible(true);
for (int i = 0; i < types1.length; i++) {
if (fields[j].getType().getName()
.equalsIgnoreCase(types1[i])
|| fields[j].getType().getName()
.equalsIgnoreCase(types2[i])) { if (fields[j].get(obj) != null
&& !"".equals(fields[j].get(obj))
&& !"null".equals(fields[j].get(obj))) {
System.out.println(fields[j].get(obj) + " ");
ps.setObject(j + 1, fields[j].get(obj));
} else {
System.out.println(fields[j].get(obj) + " ");
ps.setObject(j + 1, null);
}
}
}
}
System.out.println(ps.toString());
ps.executeUpdate();
getConnection().commit();
} catch (Exception e1) {
e1.printStackTrace();
} } public static void main(String[] args) {
try {
DButils.getConnection();
// System.out.println(getCount("SELECT count(table_name) FROM information_schema.TABLES WHERE table_name='book' "));
Person person = new Person();
person.setId(1);
person.setAddress("xin xiang");
insertEntity(Person.class, person);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
使用JDBC 插入向数据库插入对象的更多相关文章
- JDBC 连接Oracle数据库 各个对象的理解
JDBC: 1. **代码实现:(连接oracle数据库) 1.导入驱动jar包 2.注册驱动 Class.forName("oracle.jdbc.driv ...
- JDBC实现往MySQL插入百万级数据
想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很天真.... DROP PROCEDURE IF EXISTS proc_initData; ...
- mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- 使用JDBC在MySQL数据库中快速批量插入数据
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...
- Excel向数据库插入数据和数据库向Excel导出数据
为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,my ...
- Java使用SQLServerBulKCopy实现批量插入SQLSqerver数据库
这是CodingSir的帖子说的(由于不够详细,我现在提供给详细的,上手即用): Microsoft SQL Server 的bcp命令可以快速将大型文件复制插入到数据库中,C#提供了SqlBulkC ...
- [转] JAVA读取excel数据(插入oracle数据库)
原文地址:http://blog.csdn.net/zczzsq/article/details/16803349 本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果 ...
随机推荐
- docker使用阿里云镜像仓库docker
1:阿里云docker仓库 https://dev.aliyun.com/search.html 2:进去注册帐号后,点击自己的管理中心. 3:在管理中心点击加速器,右边面板会有你的加速地址,右边面板 ...
- c++_最大公共子串
标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...
- 条款31:将文件间的编译依存关系降至最低(Minimize compilation dependencies between files)
NOTE1: 1.支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 2.程序库头文件应 ...
- 为何ARM linux会引入Device Tree(转)
http://www.360doc.com/content/14/0522/20/14530056_380011180.shtml
- viva correction statements
* List of amendments| No. | Location | Amendments ...
- Android发布apk后解决百度地图不显示的问题
今天在做Android apk发布时,发现发布后不能显示百度地图,结合网上的信息,及自己的实验,终于可以了.原来在Eclipse上直接run的是测试版本,而发布后是运行版本,两个版本的SHA1值不一样 ...
- 【HTML/XML 4】实例分析HTML和XML的不同
导读:上回书说到,XML和HTML有着各自的不同点,综合表现在:1,HTML只是Web显示数据的通用方法,而XML提供了直接处理Web数据的通用方法.2,HTML着重描述Web页面的显示格式,而XML ...
- HDU 1426 dancing links解决数独问题
题目大意: 这是一个最简单的数独填充题目,题目保证只能产生一种数独,所以这里的初始9宫格较为稠密,可以直接dfs也没有问题 但最近练习dancing links,这类数据结构解决数独无疑效率会高很多 ...
- POJ 2375 Cow Ski Area【tarjan】
题目大意:一个W*L的山,每个山有个高度,当且仅当一个山不比它相邻(有公共边的格子)的山矮时能够滑过去,现在可以装化学电梯来无视山的高度滑雪,问最少装多少电梯使得任意两点都可到达 思路:最后一句话已经 ...
- 匈牙利游戏(codevs 1269)
题目描述 Description Welcome to the Hungary Games! The streets of Budapest form a twisted network of one ...