204d5636d1f14a3af0de85f61c071a01d10228d0
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / sql / WikipediaDB.java
1 package net.sourceforge.phpeclipse.wiki.sql;
2
3 import java.io.BufferedReader;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.sql.Connection;
8 import java.sql.DriverManager;
9 import java.sql.PreparedStatement;
10 import java.sql.ResultSet;
11 import java.sql.ResultSetMetaData;
12 import java.sql.SQLException;
13 import java.sql.Statement;
14 import java.util.ArrayList;
15
16 import net.sourceforge.phpeclipse.wiki.editor.LineTokenizer;
17
18 public class WikipediaDB {
19
20   public static void dump(ResultSet rs) throws SQLException {
21
22     // the order of the rows in a cursor
23     // are implementation dependent unless you use the SQL ORDER statement
24     ResultSetMetaData meta = rs.getMetaData();
25     int colmax = meta.getColumnCount();
26     int i;
27     Object o = null;
28
29     // the result set is a cursor into the data. You can only
30     // point to one row at a time
31     // assume we are pointing to BEFORE the first row
32     // rs.next() points to next row and returns true
33     // or false if there is no next row, which breaks the loop
34     for (; rs.next();) {
35       for (i = 0; i < colmax; ++i) {
36         o = rs.getObject(i + 1); // Is SQL the first column is indexed
37         // with 1 not 0
38         System.out.print(o.toString() + " ");
39       }
40
41       System.out.println(" ");
42     }
43   }
44
45   public static ArrayList getResultAsString(ResultSet rs) throws SQLException {
46     ArrayList list = new ArrayList();
47     int maxProposals = 500;
48     // the order of the rows in a cursor
49     // are implementation dependent unless you use the SQL ORDER statement
50     ResultSetMetaData meta = rs.getMetaData();
51     int colmax = meta.getColumnCount();
52     int i;
53     Object o = null;
54
55     // the result set is a cursor into the data. You can only
56     // point to one row at a time
57     // assume we are pointing to BEFORE the first row
58     // rs.next() points to next row and returns true
59     // or false if there is no next row, which breaks the loop
60     for (; rs.next();) {
61       for (i = 0; i < colmax; ++i) {
62         o = rs.getObject(i + 1); // Is SQL the first column is indexed
63         // with 1 not 0
64         list.add(o.toString());
65         maxProposals--;
66         if (maxProposals <= 0) {
67           return list;
68         }
69       }
70     }
71     return list;
72   }
73
74   public static void main(String[] args) {
75     WikipediaDB db = null;
76
77     try {
78       db = new WikipediaDB();
79     } catch (Exception ex1) {
80       ex1.printStackTrace(); // could not start db
81       return; // bye bye
82     }
83
84     try {
85       // do a query
86       ArrayList list = db.queryPrefix("Programming:PHP");
87       //      db.query("SELECT * FROM cur WHERE cur_title like 'Programming:PHP%'"); // WHERE num_col < 250");
88       for (int i = 0; i < list.size(); i++) {
89         System.out.println(list.get(i).toString());
90       }
91       // at end of program
92       db.shutdown();
93     } catch (SQLException ex3) {
94       ex3.printStackTrace();
95     }
96   }
97
98 //  private static void readFile(WikipediaDB db, String filename) {
99 //    FileReader fileReader;
100 //    try {
101 //      BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
102 //      //      String line;
103 //      LineTokenizer lineTokenizer = new LineTokenizer();
104 //      StringBuffer line = new StringBuffer(1024);
105 //      while (lineTokenizer.getToken(line, bufferedReader)) {
106 //        if (line.length() == 0) {
107 //          // this should not happen
108 //        } else {
109 //          //            try {
110 //          //              db.update("INSERT INTO wp_titles(title) VALUES('" + line + "')");
111 //          System.out.println(line);
112 //          line.delete(0, line.length());
113 //          //        addLine(line);
114 //          //            } catch (SQLException ex3) {
115 //          //// ex3.printStackTrace();
116 //          //            }
117 //        }
118 //      }
119 //      bufferedReader.close();
120 //    } catch (FileNotFoundException e) {
121 //      // ignore this
122 //      // TODO DialogBox which asks the user if she/he likes to build new index?
123 //    } catch (IOException e) {
124 //      // TODO Auto-generated catch block
125 //      e.printStackTrace();
126 //    }
127 //  }
128
129   Connection conn;
130
131   PreparedStatement fGetPrefixTitles;
132
133   public WikipediaDB() throws Exception // note more general exception
134   {
135
136     // Load the Database Engine JDBC driver
137     // mysql-connector.jar should be in the class path or made part of the current jar
138     Class.forName("com.mysql.jdbc.Driver");
139
140     // connect to the database. This will load the db files and start the
141     // database if it is not alread running.
142     // db_file_name_prefix is used to open or create files that hold the state
143     // of the db.
144     // It can contain directory names relative to the
145     // current working directory
146     conn = DriverManager.getConnection("jdbc:mysql://localhost/wikidb", // filenames
147         "root", // username
148         ""); // password
149     fGetPrefixTitles = conn.prepareStatement("SELECT cur_title FROM cur WHERE LOWER( cur_title ) like ?");
150   }
151
152   //use for SQL commands CREATE and SELECT
153   public synchronized void query(String expression) throws SQLException {
154
155     Statement st = null;
156     ResultSet rs = null;
157
158     st = conn.createStatement(); // statement objects can be reused with
159     // repeated calls to execute but we
160     // choose to make a new one each time
161     rs = st.executeQuery(expression); // run the query
162
163     // do something with the result set.
164     dump(rs);
165     st.close(); // NOTE!! if you close a statement the associated ResultSet is
166     // closed too
167     // so you should copy the contents to some other object.
168     // the result set is invalidated also if you recycle an Statement
169     // and try to execute some other query before the result set has been
170     // completely examined.
171   }
172
173   public synchronized ArrayList queryPrefix(String prefix) throws SQLException {
174     fGetPrefixTitles.setString(1, prefix.toLowerCase() + '%');
175     ResultSet rs = null;
176     rs = fGetPrefixTitles.executeQuery(); // run the query
177     // do something with the result set.
178     return getResultAsString(rs);
179     //    st.close(); // NOTE!! if you close a statement the associated ResultSet is
180   }
181
182   public void shutdown() throws SQLException {
183
184     conn.close(); // if there are no other open connection
185     // db writes out to files and shuts down
186     // this happens anyway at garbage collection
187     // when program ends
188   }
189
190   //use for SQL commands DROP and INSERT and UPDATE
191   public synchronized void update(String expression) throws SQLException {
192
193     Statement st = null;
194
195     st = conn.createStatement(); // statements
196
197     int i = st.executeUpdate(expression); // run the query
198
199     if (i == -1) {
200       System.out.println("db error : " + expression);
201     }
202
203     st.close();
204   }
205 }