怎样写一个通用的JDBC查询方法

怎样写一个通用的JDBC查询方法,第1张

public static Object get(Class clazz,String sql,Object[] pars)

{

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

Object obj = null;

//获得数据库连接

conn = getConnection();

try {

//给sql的参数赋值并执行查询

ps = connprepareStatement(sql);

for (int i = 0; i < parslength; i++) {

pssetObject(i+1, pars[i]);

}

rs = psexecuteQuery();

//根据查询结果获得该rs对应的ResultSetMetaData对象

ResultSetMetaData rsmd = rsgetMetaData();

//获得返回的列的数量

int count = rsmdgetColumnCount();

//该数组存放列的名称

String[] columns = new String[count];

//向数组中存放列的名称

for (int i = 0; i < columnslength; i++) {

columns[i] = rsmdgetColumnLabel(i+1);

}

//如果结果中有数据存在

if(rsnext())

{

//根据pojo的class反射获得其对象

obj = clazznewInstance();

//获得pojo所有的方法

Method[] methods = objgetClass()getMethods();

for (int i = 0; i < columnslength; i++) {

//根据列名获得set方法<由于没有映射文件,要求pojo中的属性必须和列名相同>

String column = columns[i];

String methodName = "set" + columnsubstring(0,1)toUpperCase() + columnsubstring(1);

//根据获得的方法数组去迭代 如果方法名称和上面获得的set方法相同 就执行这个方法

for (int j = 0; j < methodslength; j++) {

Method method = methods[j];

if(methodgetName()equals(methodName))

{

methodinvoke(obj, rsgetObject(column));

}

}

}

}

} catch (Exception e) {

eprintStackTrace();

} finally{

close(rs,ps,conn);

}

return obj;

}

真要做能用的查询,还是使用xml配置文件或者注解好些。比较灵活,性能也要好些。

用元数据都是比较耗费性能的,而且也比较麻烦。

分析如下:

--1select SC1S#  from SC SC1 JOIN SC SC2 ON SC1S#=SC2S#

WHERE SC1C#='001' AND SC2C#='002' AND SC1score>SC2score

--2select S#,AVG(score)

平均成绩  from SC    group by S#    

having AVG(score)>60 --3select StudentS#,

Sname,COUNT() 选课数,SUM(score) 总成绩 

from Student JOIN SC on StudentS#=SCS#  

group by StudentS#,Sname

扩展资料:

数据库 *** 作的注意事项

1、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null

最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库

备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num = 0

3、应尽量避免在 where 子句中使用 != 或 <> *** 作符,否则将引擎放弃使用索引而进行全表扫描。

4、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or Name = 'admin'

可以这样查询:

select id from t where num = 10

union all

select id from t where Name = 'admin'

5、in 和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

很多时候用 exists 代替 in 是一个好的选择:select num from a where num in(select num from b)

用下面的语句替换:select num from a where exists(select 1 from b where num=anum)

6、下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’

若要提高效率,可以考虑全文检索。

7、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。

参考资料来源:百度百科:数据库

SQL语言包含以下功能:

一:数据查询语言(DQL:Data Query Language):

其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

二:数据 *** 作语言(DML:Data Manipulation Language):

其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。

三:事务处理语言(TPL):

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。

四:数据控制语言(DCL):

它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

五:数据定义语言(DDL):

其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。

六:指针控制语言(CCL):

它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的 *** 作。

以上就是关于怎样写一个通用的JDBC查询方法全部的内容,包括:怎样写一个通用的JDBC查询方法、数据库查询 查询“001”课程比“002”课程成绩高的所有学生的学号、SQL是通用的功能极强的关系数据库标准语言,其中什么语句最常用于实现数据查询功能的 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9778133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存