当前位置:网站首页>Dbutil auxiliary class, manual commit transaction, metadata
Dbutil auxiliary class, manual commit transaction, metadata
2022-06-11 12:58:00 【The joy of looking up at the stars】
Apache dbutil There are many classes in this package , Mainly the following three
- Dbutils auxiliary
- Queryrunner: Additions and deletions , If the data is submitted to the database automatically , You must implement a constructor with parameters
Update()
Query()
- If it's a query , Need to use resultsetHandler Interface , There are many implementation classes , An implementation class corresponds to a different query type
( Corresponding to different return value types )
QueryRunner runner=new QueryRunner(getdatasourceClass.getdatasourceFunction());
ArrayHandler Return the first row of data in the result set , And use object Array receive
Object[] student=runner.query("select * from student_info where id>?",new ArrayHandler(),1);
System.out.print(student[1]);
ArrayListHandler With list And an array to return the result set ,list There is one in every line of the object Array
List<Object[]> students=runner.query("select * from student_info where id>?",new ArrayListHandler(),1);
for(Object[] student:students)
{System.out.print(student[0]);}
BeanHandler Returns the first row of data in the result set as a class , Note that the variable name in the class should be consistent with the table
Student student=runner.query("select * from student_info where id>?",new BeanHandler <Student> (Student.class),1);//Student.class yes java Reflection of , Don't understand, , Write this to automatically put the query results in student In the object
System.out.print(student.getLoc());
BeanListHandler Return multiple rows of data in the result set with list<student> receive
List<Student> students=new ArrayList<>();
students=runner.query("select * from student_info where id>?",new BeanListHandler<Student>(Student.class),1);
BeanMapHandler Number the result set , return map oracle The default data type in is decimal type ,java neutralization decimal The corresponding is bigdecimal type
Map<BigDecimal,Student> students=runner.query("select * from student_info where id>?",newBeanMapHandler<BigDecimal,Student>(Student.class,"id"),1);
Student stu=students.get( new BigDecimal(1));
MapHandler With map Returns the first row of query results in
Map<String,Object> student =runner.query("select * from student_info where id>?",new MapHandler(),1);
System.out.print(student);//
result :{ID=2, NAME=name2, PWD=pwd2, LOC=loc2}
<String,Object> It's a rule to put this map The format of ,key yes string,value yes object
MapListHandler Return multiple rows of results in the result set
List< Map<String,Object>> student =runner.query("select * from student_info where id>?",new MapListHandler(),1);
System.out.print(student);
result :[{ID=2, NAME=name2, PWD=pwd2, LOC=loc2}, {ID=5, NAME=name5, PWD=loc5, LOC=psw5}]
List Put in map
Columnlisthander: Put a column in the result ( Like all of them id), Save in list
List< String> student =runner.query("select * from student_info where id>?",new ColumnListHandler<String>("loc"),1);
System.out.print(student);
among object…paramas Represents a variable parameter : You can write a single value , You can also write arrays
Object[] student=runner.query("select * from student_info where id>? And name like ?",new ArrayHandler(),new Object[]{ 1,"%n%"});
System.out.print(student[0]);
Maybe because jar Package version problem , When the parameter is an array ( The above sentence ) Perform error , Just change another version
increase ( Auto commit transaction )
int result= runner.update(" insert into student_info values(?,?,?,?)",new Object [ ] { 6,"name6","loc6","psw6"} );
System.out.print(result);
Delete ( Auto commit transaction )
int result= runner.update(" delete from student_info where id=?",2 );
System.out.print(result);

Commit transactions manually :
Transfer accounts , There should be two steps , First reduce Zhang San's money , Give Li Si more money . Or at the same time , Or fail at the same time .
step :
If you want to ensure data security , But also to ensure performance , have access to threadlocal
Connection Can not be further divided , One connection Only one addition, deletion, modification and query can be completed , And when it's done, submit , But I need to add, delete, modify and check many times , Submit again , You use threadlocal, At the first dao In operation Really created a connection object , Then several other times dao In operation , With the help of t1 Its own characteristics The connection Duplicate multiple (connection Only one... Was created , So it's time to connection All operations in Must correspond to the same transaction ) also t1 take connection Multiple... Are copied at the use level , Therefore, multiple... Can be completed at the same time dao operation , Submit only once .
Threadlocal: Make a copy for each thread , Each thread can access its own internal copy , Alias thread local variable
Set() to t1 Store a variable in
Get() from t1 Get variables in ( copy )
Remove() Delete copy
For databases , One connection corresponds to one transaction , A transaction can contain multiple dml operation ( Additions and deletions )
All objects . Methods need to judge whether they are empty
Transaction flow : Open transaction ( Changing automatic commit to manual commit is to start the transaction )
Carry on all kinds of dml operation normal Will just all dml Submit all
Failure ( abnormal ) Will just all dml Roll back all ( All failed )
Metadata : Data that describes data
Three types of : Database metadata 、 Parameter metadata 、 ResultSet Metadata
- Database metadata DataBaseMetaData
Database metadata includes Database name Database version information Driver name url user name
Just remember that Connection ->databasemetadata->. The acquisition method of database metadata can
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
DatabaseMetaData dbmetadata =conn.getMetaData();
String dbname=dbmetadata.getDatabaseProductName();// Returns the database name
System.out.println(dbname);
String username=dbmetadata.getUserName();// Get username
System.out.println(username);
String dbversion=dbmetadata.getDatabaseProductVersion();// Get the version information of the database
System.out.println(dbversion);
String drivername=dbmetadata.getDriverName();// Get driver name
System.out.println(drivername);
Specify the primary key information of the table getprimarykeys()
ResultSet rs=dbmetadata.getPrimaryKeys(null,username,"STUDENT_INFO");
// The first parameter is category information , Usually it is null If the second one is oracle database , Capitalized user name , The third is the upper case table name
while (rs.next())
{
Object tablename=rs.getObject(1);// Table category
Object tablename=rs.getObject(2);// Table mode
Object tablename=rs.getObject(3);// The name of the table
Object columnname=rs.getObject(4);// Primary key name
Object columnname=rs.getObject(5);// The serial number of the primary key
Object columnname=rs.getObject(6);// Constraint name of primary key
}
- Parameter metadata
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
PreparedStatement pstat=conn.prepareStatement("select * from student_info where id>?",0);
ParameterMetaData prematacount= pstat.getParameterMetaData();
int count=prematacount.getParameterCount();
System.out.println(count);
Just remember that connection-》 Pstat-》 parameterMeatadata-》. The acquisition method of
- ResultSet Metadata resultsetmeatadta
Just remember that Resultset->resultsetmetadata
Connection conn= getdatasourceClass.getdatasourceFunction().getConnection();
PreparedStatement pstat=conn.prepareStatement("select * from student_info ");
ResultSet rs= pstat.executeQuery();
ResultSetMetaData data= rs.getMetaData();
System.out.println(data.getColumnCount());// The returned result set has several columns ( There are several properties )
System.out.println(data.getColumnName (i));// Return result set No i Column name
System.out.println(data.getColumnTypeName (i));// Return result set No i The type of the column
边栏推荐
猜你喜欢

How can non-standard automation equipment manufacturing enterprises achieve rapid and accurate quotation with the help of ERP system?

Condition debug of pycharm

Which 4K projector is the most cost-effective? When the Bay X3 Pro highlights the 128G storage 618, it is worth seeing

@Controller和RequestMapping如何解析的

Redis data type Daily use Scenarios

Oracle database import data steps

openharmony标准系统移植之音频适配

Kehai Rongsheng & zhenghang will jointly welcome the future of digital intelligence with informatization driven management upgrading

Why are the current membership warehouse stores bursting out collectively?

What are the advantages of comprehensive venues?
随机推荐
What problems should be paid attention to in running health preserving physiotherapy center?
31w赛题奖金!当 AI for Science 撞上“先导杯”,会擦出什么样的火花?
How can I use a domain name to access a website?
SQL的语法
Unity game protection "big training", read and understand the game's pre defense
[noip1998] spelling
[untitled]
How about Lenovo Xiaoxin 520? Which is more worth buying than dangbei D3x?
Another way to achieve family reunion, 2022 flagship projection nut j10s is planted with grass
经营体育馆有哪些要素?
石头科技:研发实力和过硬品质 助力扫地机器人产业升级
一个时代的终结!十年了吴恩达经典《机器学习》课程本月关闭注册,上线新课!...
@Controller和RequestMapping如何解析的
Simple score statistics
第五章 数据类型(四)
Is it safe to open an account online in 2022?
美容院管理系统如何解决门店运营的三大难题?
启封easy QF PDA帮助企业提升ERP的管理水平
Imx6ul development board porting EMMC startup process of mainline u-boot
刚高考完有些迷茫不知道做些什么?谈一谈我的看法