1 2 3 4 5 6 7 8 9 10 | lib "personal"; public class MyScript extends CustomCorePersonal { public void init() { //對CustomCore_UI初始化 CustomCore_UI_INIT(); } } |
第一行的敘述就是引用外部程式,這裡引用一個目錄(script/library/personal),目錄下的所有.java檔都會一併被引用,最終也會引用到CustomCore(script/library/accustomcore)。
這邊另外提一件事,就是MyScript為什麼不直接繼承CustomCore,而要透過personal裡的CustomCorePersonal在去繼承CustomCore,其實主要是將腳色分配清楚,accustomcore由AC維護,personal由使用者自行維護,可在CustomCorePersonal中追加功能,如果AC要更新時就會比較容易替換。
---
也可以引用jar檔(一種壓縮檔,裡面放了很多編譯好的類別),這裡藉著引用jar檔的範例,順便示範一下SQLite的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | lib "personal"; lib "sqlite-jdbc-3.8.7.jar"; import java.sql.*; import org.sqlite.SQLiteConfig; import org.sqlite.SQLiteDataSource; public class MyScript extends CustomCorePersonal implements InpEventListener { HtmlPanel my_panel = new HtmlPanel(BLACK, BLACK, false, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); MyDB mydb = new MyDB(); public void init() { //對CustomCore_UI初始化 CustomCore_UI_INIT(); //在側邊選單加入按鈕 HtmlInputHelper html = new HtmlInputHelper(LIGHTGRAY); html.add(new InpBtn("建立資料表", this, new Args("cmd=create"))); html.add(new InpBtn("新增資料", this, new Args("cmd=new"))); html.add(new InpBtn("列出資料", this, new Args("cmd=list"))); my_panel.setText(html.get()); addTabPanel("資料庫", my_panel); } //處理按鈕事件 public boolean eventOccurred(InpComponent comp, Args arg) { try { dbg.open(); dbg.clear(); if (arg != null && arg.get("cmd").equals("create")) { mydb.createTable(); dbg.print("已建立資料表"); } if (arg != null && arg.get("cmd").equals("new")) { String data = inpDialog("輸入資料", "輸入資料", "ABC"); if (data != null && data.length() > 0) { mydb.insert(data); dbg.print("資料新增完成"); } } if (arg != null && arg.get("cmd").equals("list")) mydb.listAll(); } catch (Exception ex) {EX_HANDLE(EX_INT, ex);} return false; } //腳本終結時呼叫 public void uninit() { //記得db要close if (mydb != null) mydb.close(); } class MyDB { final String dbname = "mydbtest"; final String tblname = "test"; Connection con = null; public MyDB() { try { SQLiteConfig config = new SQLiteConfig(); config.setSharedCache(true); config.enableRecursiveTriggers(true); SQLiteDataSource ds = new SQLiteDataSource(config); ds.setUrl("jdbc:sqlite:sqldb/"+dbname+".db"); con = ds.getConnection(); } catch (Exception ex) {EX_HANDLE(EX_INT, ex);} } //create Table public void createTable() throws SQLException { String sql = "DROP TABLE IF EXISTS "+tblname+" ;create table "+tblname+" (id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING);"; Statement stat = null; stat = con.createStatement(); stat.executeUpdate(sql); } //drop table public void dropTable() throws SQLException { String sql = "drop table "+tblname+" "; Statement stat = null; stat = con.createStatement(); stat.executeUpdate(sql); } //新增 public void insert(String name) throws SQLException { String sql = "INSERT INTO "+tblname+" (name) VALUES ('" + name + "')"; Statement stat = con.createStatement(); stat.executeUpdate(sql); } //修改 public void update(int id, String name) throws SQLException { String sql = "update "+tblname+" set name = ? where id = ?"; PreparedStatement pst = null; pst = con.prepareStatement(sql); int idx = 1 ; pst.setString(idx++, name); pst.setInt(idx++, id); pst.executeUpdate(); } //刪除 public void delete(int id) throws SQLException { String sql = "delete from "+tblname+" where id = ?"; PreparedStatement pst = null; pst = con.prepareStatement(sql); int idx = 1 ; pst.setInt(idx++, id); pst.executeUpdate(); } //列出 public void listAll() throws SQLException { String sql = "select * from "+tblname+""; Statement stat = null; ResultSet rs = null; stat = con.createStatement(); rs = stat.executeQuery(sql); int cnt = 0; while(rs.next()) { cnt++; dbg.print(rs.getInt("id")+" : \t"+rs.getString("name")); } dbg.print("-------"); dbg.print("共"+cnt+"筆"); } public void close() { try { if (con != null) con.close(); } catch (Exception ex) {EX_HANDLE(EX_INT, ex);} } } } |
引用的部分比較需要看的在2~6行,第二行引用的"sqlite-jdbc-3.8.7.jar"已經被放在script/library/下,其他幾行的import是java引用package的敘述,通常這種公開的jar檔在網路上都可以查到文件或範例。
---
另外一提,腳本還有一個固定會引用的目錄,就是script/library/default,裡面可以放一些使用者固定會引用java或jar檔,方便簡化開發流程。
沒有留言:
張貼留言