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 插入向数据库插入对象的更多相关文章

  1. JDBC 连接Oracle数据库 各个对象的理解

    JDBC: 1. **代码实现:(连接oracle数据库) ​    1.导入驱动jar包 ​    2.注册驱动 ​     Class.forName("oracle.jdbc.driv ...

  2. JDBC实现往MySQL插入百万级数据

    想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很天真.... DROP PROCEDURE IF EXISTS proc_initData; ...

  3. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

  4. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1      背景 系统中需要批量生成单据数据到数据库表,所以采用 ...

  5. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  6. 使用JDBC在MySQL数据库中快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...

  7. Excel向数据库插入数据和数据库向Excel导出数据

    为了熟悉java里工作簿的相关知识点,所以找了“Excel向数据库插入数据和数据库向Excel导出数据”的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,my ...

  8. Java使用SQLServerBulKCopy实现批量插入SQLSqerver数据库

    这是CodingSir的帖子说的(由于不够详细,我现在提供给详细的,上手即用): Microsoft SQL Server 的bcp命令可以快速将大型文件复制插入到数据库中,C#提供了SqlBulkC ...

  9. [转] JAVA读取excel数据(插入oracle数据库)

    原文地址:http://blog.csdn.net/zczzsq/article/details/16803349 本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果 ...

随机推荐

  1. PHP中的正则

    概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串. j简单的说就是通过一些规定的符号和字符组合成的一种语法规则 其实,只有了解一种语言的正则使用 ...

  2. 在Windows上安装和配置Jenkins

    一.windows上安装Jenkins 1.官网下载Jenkins安装包Jenkins.msi ,进入安装模式,选择默认配置,安装完成之后,就会默认打开浏览器 http://localhost:808 ...

  3. java 生成二维码工具

    二维码生成 Gitee:https://gitee.com/search?utf8=%E2%9C%93&search=qrext4j&group_id=&project_id= ...

  4. Ubuntu 和 centos7 服务的启动

    Ubuntu 下: /etc/init.d/nginx  start | stop | reload Centos7下: service nginx start | stop | reload

  5. Linux基础学习-Samba文件共享服务

    使用Samba文件共享服务 Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了N ...

  6. debian 添加永久环境变量方法

    添加临时环境变量方法: export PATH=$PATH:/usr/local/....(你的环境变量路径) 永久添加环境变量,步骤如下: #在~/.bashrc文件末尾添加如下: PATH = $ ...

  7. 算法导论 第九章 中位数和顺序统计量(python)

    第i个顺序统计量:该集合中第i小的元素(建集合排序后第i位 当然算法可以不排序) 中位数:集合中的中点元素 下中位数 上中位数 9.1最大值和最小值 单独的max或min每个都要扫一遍 n-1次比较 ...

  8. [MVC]在练习MusicStore过程中问题实录

    1,问题描述:MVC在添加基于框架的控制器时,出现无法检索xxx的元数据 参考目录:http://www.cnblogs.com/0banana0/p/4050793.html#undefined 解 ...

  9. PS学习笔记(02)

    书籍推荐: <设计之下>这本APP设计书字里行间都透露出了真实,作者能将其工作流程和方法分享出来,实在值得尊敬.通过这本书全面了解了真实的设计工作是怎么做的,今后可以用到自己的工作中.赞! ...

  10. xtu字符串 C. Marlon's String

    C. Marlon's String Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java ...