2011年10月31日 星期一

[Ubuntu 常見問題] Syntax error: Bad for loop variable解決方法

轉載自 這裡 
前言 : 
今天接手一個 Test automation 的 shell script, 無奈怎麼跑都會出現 "Bad for loop variable". 查了一下發現原有的 script 語法並沒有錯誤. 還好有 google 到原來是 Ubuntu 使用 dash 取代了我們常見的 bash. 而在 for loop 地方會出現如下報錯訊息 : 
john@tda-server:~/Test/CreateAccount$ sudo ./creataccount.sh <執行 script>
./creataccount.sh: 8: Syntax error: Bad for loop variable

而第八行的部分剛好就是 for loop : 
  1. #!/bin/sh  
  2. loop=755  
  3. touch passwdlist.txt  
  4.   
  5.   
  6. ## Create account and prepare password list file  
  7.   
  8. for (( i=1; i<=${loop}; i+=1 ))  
  9. #for ((i=756;i<=777;i+=1));  
  10. do  
  11.         echo -n "*** $i ***  "  
  12.         useradd -m user$i  
  13.         echo user$i":"user$i >> passwdlist.txt  
  14.         echo "process next account..."  
  15. done  
  16.   
  17.   
  18. echo "Change password..."  
  19. ## Start to create account  
  20. cat passwdlist.txt | chpasswd  
解決方法 : 
解決方法就是執行下面命令 : 
john@tda-server:~/Test/CreateAccount$ sudo dpkg-reconfigure dash

接著會出現下面的對話框, 按Tab 選擇 後退出 : 
 

再次執行 shell script 便可以成功! 

補充說明 : 
鳥哥Linux 私房菜 - 第十三章、學習 Shell Scripts

2011年10月30日 星期日

[ Java 代碼範本 ] 使用 Java 操作 SQLiteJDBC

前言 : 
這裡的範例代碼是基於 Xerial SQLite JDBC Driver 進行實現. 底下是官網對於該 SQLite JDBC Driver 的說明 : 
Our SQLiteJDBC library, developed as a part of Xerial project, requires no configuration since all native libraries for Windows, Mac OS X, Linux and pure-java SQLite, which works in any OS enviroment, are assembled into a single JAR (Java Archive) file. The usage is quite simple; Download our sqlite-jdbc library, then append the library (JAR file) to your class path. See the sample code.

範例代碼 : 
- Sample.java :
  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.ResultSet;  
  4. import java.sql.SQLException;  
  5. import java.sql.Statement;  
  6.   
  7.   
  8. public class Sample  
  9. {  
  10.   public static void main(String[] args) throws ClassNotFoundException  
  11.   {  
  12.     // load the sqlite-JDBC driver using the current class loader  
  13.     Class.forName("org.sqlite.JDBC");  
  14.       
  15.     Connection connection = null;  
  16.     try  
  17.     {  
  18.       // create a database connection  
  19.       connection = DriverManager.getConnection("jdbc:sqlite:sample.db");  
  20.       Statement statement = connection.createStatement();  
  21.       statement.setQueryTimeout(30);  // set timeout to 30 sec.  
  22.         
  23.       statement.executeUpdate("drop table if exists person");  
  24.       statement.executeUpdate("create table person (id integer, name string)");  
  25.       statement.executeUpdate("insert into person values(1, 'leo')");  
  26.       statement.executeUpdate("insert into person values(2, 'yui')");  
  27.       ResultSet rs = statement.executeQuery("select * from person");  
  28.       while(rs.next())  
  29.       {  
  30.         // read the result set  
  31.         System.out.println("name = " + rs.getString("name"));  
  32.         System.out.println("id = " + rs.getInt("id"));  
  33.       }  
  34.     }  
  35.     catch(SQLException e)  
  36.     {  
  37.       // if the error message is "out of memory",   
  38.       // it probably means no database file is found  
  39.       System.err.println(e.getMessage());  
  40.     }  
  41.     finally  
  42.     {  
  43.       try  
  44.       {  
  45.         if(connection != null)  
  46.           connection.close();  
  47.       }  
  48.       catch(SQLException e)  
  49.       {  
  50.         // connection close failed.  
  51.         System.err.println(e);  
  52.       }  
  53.     }  
  54.   }  
  55. }  

至於如何指定 DB 檔案的位置, 是透過 DriverManager.getConnection() 呼叫時同時指定, 幾個簡單範例如下 : 
* Here is an example to select a file C:\work\mydatabase.db (in Windows
  1. Connection connection = DriverManager.getConnection("jdbc:sqlite:C:/work/mydatabase.db");  
* A UNIX (Linux, Mac OS X, etc) file /home/leo/work/mydatabase.db 
  1. Connection connection = DriverManager.getConnection("jdbc:sqlite:/home/leo/work/mydatabase.db");  

補充說明 : 
Free學習札記 : SQLite with Java 
Java Gossip: Statement、 ResultSet

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...