JDBC查询和mysql连接

package lianxi1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class JdbcTest {
@Test
  public void testMysql(){
      Student stu = new Student();
      String sql = "SELECT flowId,type  FROM student where flowId = ?";   // 别名不能使用,?
      stu = get(Student.class,sql,3);
      System.out.println(stu);

  }
  public <T>T get(Class<T> clazz,String sql,Object...args){
      T entity = null;
      Connection conn = null;
      PreparedStatement ps = null;
      ResultSet rs = null;
      try {
        conn = JdbcTools.getConnection();
        ps = conn.prepareStatement(sql);
        for(int i=0;i<args.length;i++){
          ps.setObject(i+1, args[i]);
        }
        rs = ps.executeQuery();
        ResultSetMetaData rsma = rs.getMetaData();
        Map<String,Object> map = new HashMap();
        //处理结果集,利用ResultSetMapData结果集填充Map对象,因为结果集的列的别名与属性名称对应
        while(rs.next()){
            for(int i=0;i<rsma.getColumnCount();i++){
                String ColumnName = rsma.getColumnName(i+1);
                Object ColumnValue = rs.getObject(i+1);
                map.put(ColumnName, ColumnValue);
            }
        }
        //利用反射创建运行时类的对象
        if(map.size()>0){
            entity = clazz.newInstance();
        //遍历Map类的对象,为Class对象的属性赋值
        for(Map.Entry<String,Object> entry : map.entrySet()){
            String fieldName = entry.getKey();
            //System.out.println(fieldName);
            Object fieldValue = entry.getValue();
            //System.out.println(fieldValue);
            ReflectionUtils.setFieldValue(entity, fieldName, fieldValue);
        }

        }

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally{
        JdbcTools.release(rs, ps, conn);
    }

    return entity;

  }
}
package lianxi1;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcTools {
    // 数据库连接
    public static Connection getConnection() throws Exception{
        // 1在配置文件中设置连接数据库的四个字符串
        // 2 读取类路径下的jdbc.properites文件
        InputStream is = JdbcTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties pro = new Properties();
        pro.load(is);
        String driver = pro.getProperty("driverClass");
        String url = pro.getProperty("url");
        String user = pro.getProperty("user");
        String password = pro.getProperty("password");
        //3 创建连接
        Class.forName(driver);
        return DriverManager.getConnection(url, user,password);
    }
    // 执行sql语句
    public static void update(String sql,Object...args){
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JdbcTools.getConnection();
            ps = conn.prepareStatement(sql);
            for(int i=0;i<args.length;i++){
                 ps.setObject(i+1,args[i]);
            }
            ps.executeUpdate();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            JdbcTools.release(null,ps, conn);
        }
    }

    //数据库断开
    public static void release(ResultSet rs,Statement stat,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(stat!=null){
            try {
                stat.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}
时间: 2024-10-19 13:45:44

JDBC查询和mysql连接的相关文章

JDBC简介,MySQL连接,PreparedStatement 预处理命令,通配符

何须浅碧轻红色,自是花中第一流. -李清照的<鹧鸪天·桂花> JDBC 简介 我实验的MySQL数据库 配置连接MySQL驱动 数据库连接工具类 JDBC API Driver 接口 Connection 接口 DriverManager 类 Statement 接口 PreparedStatement 接口 CallableStatement 接口 ResultSet 接口 JDBC 数据库操作 测试连接示例 添加数据 查询信息 修改数据 删除数据 批处理 调用存储过程 JDBC 简介 JD

jdbc oracle和mysql连接

oracle private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";private static final String USERNAME = "用户名"; private static final  String PWD = "密码"; 导入驱动Class.forName("oracle.jdbc.OracleDriver");

mysql连接查询经典小例题

mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: 主队,客队,比赛成绩,比赛时间 方法一:(子查询和连接查询混合) step1: select result.id, t_name as h_name,match_time,result from teams join result on teams.t_id=result.h_id step2:

MySQl 子查询,左右连接,多表连接学习笔记

1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement), SELECT column1 FROM t2 称为Sub Query[子查询]. 所以,我们说子查询是嵌套在外查询内部.而事实上它有可能在子查询内部再嵌套子查询. 子查询必须出现在圆括号之间. 行

Mysql连接查询介绍

场景: 从下表中得到一个学生列表.要求是,展示:学生,性别,班级名字 此查询需要不单从学生表获取数据,还需要从班级表获取数据,此时就需要: 连接查询:join     连接:多个表记录之间的连接~! 语法: from 表名1 join 表名2 on 连接条件 select stu_name,gender,class_id,class_name from select_student join select_class  on select_student.class_id=select_clas

java jdbc 与mysql连接的基本步骤

Java与mysql链接的基本步骤: 第一步:注册驱动 方法一: [java] view plain copy DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 方法二:设置属性 [java] view plain copy System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver"); 方法三: [java] view plain copy

4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

 mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,执行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- 选择数据库 use mydb61; -- 增加 dbuser1 用户 --     创建用户'dbuser61'密码为 'dbuser61'拥有操作数据库mydb61的所有权限 GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY "dbuser61&quo

使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录

使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询.这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FR

MySQL学习——SQL查询语句(连接查询&amp;子查询)(三)

一:连接查询: 连接查询是将俩个或者俩个以上的表按照某个条件连接起来,从中选择需要的数据,连接查询同时查询俩个或者俩个以上的表时使用,当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表,例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号,那么可以通过学生表中的course_id字段与课程表中的num字段来进行连接查询,连接查询包括内连接查询和外连接查询. 1.1 内连接查询 内连接查询是一种常用的连接查询,内连接查询可以查询俩个或者以上