source: greenstone3/trunk/src/java/org/greenstone/gsdl3/sql/derby/DerbyDBWrapper.java@ 16630

Last change on this file since 16630 was 16630, checked in by xiao, 16 years ago

modify to synchronize method executeQuery

File size: 3.3 KB
Line 
1package org.greenstone.gsdl3.sql.derby;
2
3import org.greenstone.gsdl3.sql.*;
4
5
6import java.sql.Connection;
7import java.sql.ResultSet;
8import java.sql.ResultSetMetaData;
9import java.sql.SQLException;
10import java.sql.SQLWarning;
11import java.sql.Statement;
12
13import java.util.ArrayList;
14import java.util.HashMap;
15import java.util.Iterator;
16
17import org.greenstone.gsdl3.util.DBInfo;
18
19import org.apache.log4j.*;
20
21public class DerbyDBWrapper implements MetadataDBWrapper{
22 protected SQLServer sqlServer = null;
23 protected SQLStatements sqlState = null;
24 protected Connection connection = null;
25 protected Statement statement = null;
26 protected static Logger logger = Logger.getLogger(org.greenstone.gsdl3.sql.derby.DerbyDBWrapper.class.getName());
27
28
29 public DBInfo getInfo(String id){
30 if(sqlState == null) return null;
31 String dbInfoState = sqlState.getDBInfoStatement(id);
32 ArrayList result = executeQuery(dbInfoState);
33 if (result.size() == 0) return null;
34 DBInfo info = new DBInfo();
35 for(int i=0; i<result.size();i++){
36 HashMap arow = (HashMap)result.get(i);
37 Iterator ite = arow.keySet().iterator();
38 while(ite.hasNext()){
39 String key = (String)ite.next();
40 Object value = arow.get(key);
41 //logger.info(key + "=>" +value);
42 if (value == null || value.equals("")) continue;
43 info.addInfo(key.toLowerCase(),sqlState.undoDBSafe(value));
44 }
45 }
46
47 return info;
48 }
49
50 public void setSQLServer(SQLServer server){
51 sqlServer = server;
52 }
53
54 public void setSQLStatements(SQLStatements state){
55 sqlState = state;
56 }
57
58 public boolean openConnection(String databasepath){
59 connection = sqlServer.connect(databasepath);
60
61 if (connection == null) return false;
62
63 try{
64 connection.setAutoCommit(false);
65 statement = connection.createStatement();
66 }
67 catch(SQLException sqle){
68 logger.error("Database Error occured when creating a statement object",sqle);
69 return false;
70 }
71 return true;
72 }
73
74 //return a list of rows array->hashmap
75 public synchronized ArrayList executeQuery(String query_statement){
76 //the database hasn't been correct yet
77 ArrayList results = new ArrayList();
78 try{
79
80 if (statement == null){
81 logger.info("the database hasn't been correct yet");
82 return new ArrayList();
83 }
84
85 ResultSet rs = statement.executeQuery(query_statement);
86 ResultSetMetaData rsmd = rs.getMetaData();
87 int numOfColumns = rsmd.getColumnCount();
88 while(rs.next()){
89 HashMap arow = new HashMap();
90 for(int i = 1; i <= numOfColumns ; i++){
91 arow.put(rsmd.getColumnName(i).toLowerCase(), rs.getObject(i));
92 }
93 results.add(arow);
94 }
95 }
96 catch(SQLException sqle){
97 logger.error("Database Error occured when executeQuery " + query_statement,sqle);
98 return results;
99 }
100 return results;
101 }
102
103 /** check for the existence of a table**/
104 public boolean check4Table (String check_table) {
105 try {
106 statement.execute(check_table);
107 } catch (SQLException sqle) {
108 String theError = (sqle).getSQLState();
109 if (theError.equals("42X05")) // Table does not exist
110 {
111 return false;
112 }
113 else{
114 return true;
115 }
116 }
117 // System.out.println("Just got the warning - table exists OK ");
118 return true;
119 }
120
121 public void closeConnection(String databasepath){
122 sqlServer.disconnect(databasepath);
123 }
124
125 }
Note: See TracBrowser for help on using the repository browser.