使用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 插入向数据库插入对象

时间: 2024-11-08 22:20:27

使用JDBC 插入向数据库插入对象的相关文章

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

from:http://www.cnblogs.com/fnz0/p/5713102.html JDBC实现往MySQL插入百万级数据 想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很天真.... DROP PROCEDURE IF EXISTS proc_initData;--如果存在此存储过程则删掉 DELIMITER $ CREATE PROCEDURE proc_initData() BEGIN DECLARE i INT DE

DButils工具类可以用来获取数据库连接向数据库插入更新删除对象2

package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; import java.lang.reflect.*; import java.sql.*; import java.text.SimpleD

JDBC访问Oracle数据库例子源代码,包括创建table,删除table,插入记录,删除记录,查询记录等

package com.cb; public class SMSInfo { public static String ITEMINDEX = "sms_index"; public static String ITEMTO = "sms_to"; public static String ITEMFROM = "sms_from"; public static String ITEMMSG = "sms_msg"; publ

JDBC JAVA数据库插入语句

https://zhidao.baidu.com/question/540539955.html?fr=iks&word=jdbc+sql%D3%EF%BE%E4&ie=gbk JDBC JAVA数据库插入语句报错你妹的,写了占位符你又不用东西填,sql当然错了,报的sql不完整两种方案A.  valuses后的四个问号直接写上参数B.用import java.sql.PreparedStatement;包下的PreparedStatement方法预编的方式进行填充示例PreparedSt

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

使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch() throws SQLException Adds a set of parameters to this PreparedStatement object's batch of commands. int[] executeBatch() throws SQLException Submits

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

为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,mysql-connector-java-5.1.22-bin.jar,ojdbc6.jar 代码如下: 一, 建立数据库名称 javaforexcel,建立表stu DROP TABLE IF EXISTS `stu`;CREATE TABLE `stu` (  `id` int(11) N

关于使用Log4Net将日志插入oracle数据库中

1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <log4

JDBC中的批量插入和乱码解决

字符集-乱码问题 用JDBC访问MySql数据库的时候,如果JDBC使用的字符集和MySql使用的字符集不一致,那么会导致乱码发生.解决办法当时是在使用JDBC的时候指定和数据库一样的字符集.我们可以在DB_URL字符串后加上”?characterEncoding=XXX”的方式指定JDBC使用的字符集. 同时,我们需要知道MySql中使用的字符集,可以通过以下两个命令获取. 1)      show variables like '%character%';获取数据库或者整个服务器使用的字符集

springmvc+mybatis+mysql 数据库插入中文是乱码

java web项目,前台页面的表单数据,插入到数据库时,结果出现乱码"???"的问题,断断续续折腾了一天时间,废话不说,步骤如下: 一:在web.xml中配置:编码格式拦截器 <!-- 编码格式拦截器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEnco