ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2015年11月18日水曜日

Java のサンプル



ファイルの絶対パスからフォルダー名を取り出すファンクションです。

https://gist.github.com/68d2648e6c3f4634938e

2015年11月15日日曜日

Ubuntu 15.10 への Java のインストール(jdkのインストール)

今年の夏に購入した ASUS社のX552WというノートパソコンではUbuntu 15.10 が使用できるようにしてあります。このノートパソコンでAndroid Studioを動作させるために Java のJDK をインストールすることにしました。

以下のコマンドを入力しました。

sudo apt-get install openjdk-7-jdk


Linux用のAndroid Studio をダウンロードして 解凍したのちに、android-studio/bin の配下の studio.sh を実行しました。

しかしながら以下のメッセージが出力されてしまいました。

Unable to run mksdcard SDK tool


どうやら、X552Wというノートパソコンで使用されているCPUはAMDの64bitのものであるためのようです。
そこで以下のようにコマンド入力しました。
sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6


これによって、Android Studio は動作するようになりましたが以下のようなメッセージが表示されました。

System Health
OpenJDK shows intermittent performance and UI issues.We recommend using the Oracle JRE/JDK

jackcess のサンプル(テーブルの削除)

Jackcess を使ったサンプルです。データベース内の指定したテーブルの削除を行います。


https://gist.github.com/640282f9d04c2bc9b8c2

2015年11月14日土曜日

jackcess のサンプル(データベースの作成)


jackcess を使ってデータベースを作成して、テーブルを作成するサンプルです。



https://gist.github.com/8d6d37a69f883f04e430

2015年11月13日金曜日

jackcess のサンプル(テーブルのリスト)

jackcess を使ってAccessデータベースのテーブルのリストを出力するサンプルです。UNIX上で動作するものです。






import java.io.File;
import java.util.List;
import java.util.Set;

import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;


public class TableList {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

       
        String db_name="/home/xxxx/Dropbox/doc/mdb/sample.mdb";
       
        try{
            Database db = DatabaseBuilder.open(new File(db_name));
           
            Set<String> tablenames= db.getTableNames();
           
           
           
            for(String tablename : tablenames){
               
                System.out.println(tablename);
            }
           
           
        }catch(Exception e){
            System.out.println(e.toString());
        //    System.out.println(e.getMessage());
           
        }
       

       
       
    }

}

jackcess のサンプル(クエリーのリスト)

jackcess を使ったjava のサンプルのソースコードです。
データベースの中にあるクエリーの名前を出力しています。








import java.io.File;
import java.util.List;

import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.query.Query;


public class QueryTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

       
        String db_name="/home/xxxx/Dropbox/doc/mdb/sample.mdb";
       
        try{
            Database db = DatabaseBuilder.open(new File(db_name));
           
            List<Query> queris = db.getQueries();
           
           
           
            for(Query query : queris){
               
                System.out.println(query.getName());
            }
           
           
        }catch(Exception e){
            System.out.println(e.toString());
        //    System.out.println(e.getMessage());
           
        }
       
    }

}

2015年11月11日水曜日

jackcess のサンプル

jackcess を使ったサンプルのコードです。
データベース名とテーブル名を指定してフィールド名(columnの名前)を出力するものです。
jackcess を使ったサンプルは以前にも紹介させていただいたことがあります。




import java.io.File;
import java.util.List;

import com.healthmarketscience.jackcess.Column;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Table;


public class Jack {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
       
        String db_name="/home/xxxx/Dropbox/doc/mdb/sample.mdb";
        String table_name="sample_table";
       
        try{
            Database db = DatabaseBuilder.open(new File(db_name));
            db.setColumnOrder(Table.ColumnOrder.DISPLAY);
            Table table = db.getTable(table_name);
           
            List<? extends Column> Columns = table.getColumns();
           
            for(Column column : Columns){
               
                System.out.println(column.getName());
            }
           
           
        }catch(Exception e){
            System.out.println(e.toString());
           
           
        }

    }

}

2015年10月10日土曜日

Eclipse から Android Studio へ

Androidアプリの開発の環境を、Eclipse から Android Studio へ移行している途中です。
Eclipse で作成したプロジェクトのソースコードを基本的には、そのまま、Android Studio のプロジェクトのほうへコピーしています。

なおAndroid Studio の SDKは以下の場所に作成されました。(xxxxはユーザー名です。)

 \Users\xxxx\Appdata\Local\Android\sdk

jar ファイルなどのライブラリは、libs の配下に配置します。また buid.gradle の中に dependencies として記述します。

Android Studio でコンパイルする際に -Xlint:deprecationオプションがどうのこうのという茶色(赤色?)のワーニングメッセージが表示されました。どう対処すればよいのかわかりません。

2015年8月9日日曜日

Androidアプリ開発で中国語に対応させる

拙いながらEclipse を使ってAndroidアプリ開発を行っています。現在、作成中のアプリは、英語と日本語の表示に対応させています。

まずプロジェクトのフォルダーの配下の/res/values/strings.xml というファイルにデフォルトの環境(英語環境)で表示させたい英語のメッセージなどの文字列をキーワードといっしょに記述しておきます。


次に、/res/values-ja/strings.xml というファイルに日本語環境で表示させたい日本語のメッセージの文字列をキーワードといっしょに記述しておきます。

ソースコードの中では、メッセージを直接書かずに、R.string.<キーワード> のように記述しておきます。

プログラムの実行時に R.string.<キーワード> の部分がそれぞれの言語の文字列に変換されて表示されるようです。英語でも日本語でもない言語の環境では、デフォルトの英語で表示されるようです。


今回、英語と日本語の言語の表示の他に、第3の言語として中国語の表示にも対応させようと考えつきました。

日本語の場合には、values-ja というフォルダにstrings.xml ファイルを配置しておりましたが、中国語の場合には、values-zh というフォルダにファイルを配置すればよいらしいことがわかりました。

なお中国語には繁体字と簡体字があるようなのですが、どのように区別してよいのかはわかりませんでした。



以下は、私が用意した英語用(デフォルト)、日本語用、中国語用のそれぞれのstrings.xml のサンプルです。中国語は、google のオンライン翻訳などを使って作成したものですが、中国の人にちゃんと通じるかどうかあまり自信がありません。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">MDB Database Editor</string>
    <string name="versionCode">6</string>
    <string name="versionName">20150809.1100</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="select_database">Select Database File</string>
    <string name="tap_table">please tap a table name.</string>
    <string name="no_table">there is no table in this database.</string>
    <string name="error">error occurred.</string>
    <string name="not_access_file"> is not Access (.mdb .accdb)file.</string>
    <string name="upper_directory">(upper directory)</string>
    <string name="error_display_table">Error occurred in displaying table contents.</string>
    <string name="add_menu">Add Menu</string>
    <string name="search_menu">Search Menu</string>  
    <string name="previous20">previous 20 records</string>
    <string name="next20">next 20 records</string>
    <string name="complex_type">COMPLEX_TYPE column exists.</string>
    <string name="add">Add</string>
    <string name="search">Search</string>
    <string name="update">Update</string>
    <string name="delete">Delete</string>
    <string name="delete_by_sql">Delete by SQL statement</string>  
    <string name="search_comment">you can use * at Text field.ignore case</string>
    <string name="sort">sort:</string>
    <string name="sort_cancel">sort cancel</string>
    <string name="ignore_case">ignore case</string>
    <string name="asc">ascend</string>
    <string name="desc">descend</string>
    <string name="record_deleted">A record was deleted.</string>
    <string name="record_updated">A record was updated.</string>
    <string name="record_added"> record was added.</string>
    <string name="no_change">There is no change.</string>
    <string name="can_not_edit">can not edit(update,delete) this table</string>
    <string name="delete_confirmation">delete confirmation</string>
    <string name="are_you_sure">Are you sure to delete this record?</string>
    <string name="ok_delete">OK delete</string>
    <string name="cancel">Cancel</string>
    <string name="display_on_off">information on/off</string>
    <string name="dupuricate_record">(Warning)dupuricate record</string>
    <string name="only_first_editable">only first-find record can be edited/deleted.</string>
 
</resources>


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">Hello world!</string>
    <string name="select_database">データベースファイルの選択</string>
    <string name="tap_table">テーブル名をタップしてください。</string>
    <string name="no_table">このデータベースにはテーブルがありません。</string>
    <string name="error">エラーが発生しました。</string>
    <string name="not_access_file">は Accessファイル (.mdb .accdb)ではありません。</string>
    <string name="upper_directory">(上の階層へ)</string>
    <string name="error_display_table">テーブルの内容の表示でエラー発生しました。</string>
    <string name="add_menu">追加メニュー</string>
    <string name="search_menu">検索メニュー</string>
    <string name="previous20">前の20件</string>
    <string name="next20">次の20件</string>
    <string name="complex_type">COMPLEX_TYPE のフィールドが存在します。</string>
    <string name="add">追加</string>
    <string name="search">検索</string>
    <string name="update">更新</string>
    <string name="delete">削除</string>
    <string name="delete_by_sql">SQL文による削除</string>
    <string name="search_comment">Textフィールドでは*が使用できます。大小文字区別なし</string>
    <string name="sort">並べ替え:</string>
    <string name="sort_cancel">並べ替え キャンセル</string>
    <string name="ignore_case">大小文字を区別しない</string>
    <string name="asc">昇順</string>
    <string name="desc">降順</string>
    <string name="record_deleted">レコードが削除されました。</string>
    <string name="record_updated">レコードが更新されました。</string>
    <string name="record_added">レコードが追加されました。</string>
    <string name="no_change">変更がありません。</string>
    <string name="can_not_edit">このテーブルは変更、削除できません。</string>
    <string name="delete_confirmation">削除の確認</string>
    <string name="are_you_sure">本当にこのレコードを削除しますか?</string>
    <string name="ok_delete">削除する</string>
    <string name="cancel">キャンセル</string>
    <string name="display_on_off">表示オンオフ</string>
    <string name="dupuricate_record">(警告)重複したレコード</string>
    <string name="only_first_editable">はじめに見つかったレコードのみ編集/削除が可能</string>
 
 
 
</resources>




<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">Hello world!</string>
    <string name="select_database">选择一个数据库文件</string>
    <string name="tap_table">请选择一个表名</string>
    <string name="no_table">该数据库没有表</string>
    <string name="error">发生了错误。</string>
    <string name="not_access_file">这不是一个Access数据库(.mdb .accdb文件)</string>
    <string name="upper_directory">(父目录)</string>
    <string name="error_display_table">在表的显示会发生错误</string>
    <string name="add_menu">添加</string>
    <string name="search_menu">搜索</string>
    <string name="previous20">此前的20条记录</string>
    <string name="next20">接下来的20条记录</string>
    <string name="complex_type">COMPLEX_TYPE 会场上存在</string>
    <string name="add">添加</string>  
    <string name="search">搜索</string>
    <string name="update">更新</string>
    <string name="delete">删除</string>
    <string name="delete_by_sql">用sql删除</string>
    <string name="search_comment">在文本字段 您可以使用* 大写小写不敏感</string>
    <string name="sort">数据的排列:</string>
    <string name="sort_cancel">取消 数据的排列</string>
    <string name="ignore_case">大写小写不敏感</string>
    <string name="asc">升序</string>
    <string name="desc">降序</string>
    <string name="record_deleted">记录已被删除</string>
    <string name="record_updated">一个记录被更新</string>
    <string name="record_added">创纪录的加入</string>
    <string name="no_change">没有变化</string>
    <string name="can_not_edit">此表不能被改变或删除的</string>
    <string name="delete_confirmation">删除确认</string>
    <string name="are_you_sure">你确定要删除此记录?</string>
    <string name="ok_delete">删除</string>
    <string name="cancel">取消</string>
    <string name="display_on_off">显示的 开 关</string>
    <string name="dupuricate_record">(警告)重复记录</string>
    <string name="only_first_editable">唯一的记录你已经先发现,你可以更新或删除</string>
 
 
 
</resources>





2014年12月19日金曜日

Jackcess で .mdb ファイルのパスワードを調べる

以下のJava プログラムでは、Jackcess を使って、.mdbファイル(データベースファイル)にかけられたパスワードを調べて表示します。
なお、Windows上で動作を想定しています。




import java.io.File;

import com.healthmarketscience.jackcess.*;

public class jackcess_sample3{
public static void main(String[] args) {
try {

Database db = DatabaseBuilder.open(new File("c:\\users\\xxxx\\mdb\\certificate.mdb"));

String db_password=db.getDatabasePassword();

System.out.println("database password: " + db_password);

} catch (Exception e) {
e.printStackTrace();
}
}
}

2014年12月9日火曜日

Jackcess で Long 型の扱い

Jackcess の制限について


Access のデータベースをjava で操作する操作するためのjackcess というライブラリでは、LONG型をいわゆるLONG型としては処理してくれないような気がしています。int 型として扱われているように思えます。


この辺の事情が以下のサイトに記述されているようなので紹介させて頂きます。


http://stackoverflow.com/questions/21984140/jackcess-addrow-cannot-insert-a-java-long-value



Jackcess には他にも更新時の制限 があるようです。

2014年11月22日土曜日

Jackcess の更新の制限について

私の現在作成している Android アプリ Access_Editor では Jackcess と ucanaccess というjavaのライブラリを使って Access データベースの更新を行っています。この更新には制限があり、「データベースの並び順序」が「一般」または「一般 レガシー」ではないデータベースの場合には、更新できないのです。


更新できない場合には、次のようなエラーメッセージが出力されてしまいます。

unsupported collating sort order


この問題を回避するために、データベースの並び順序を「一般」または「一般 レガシー」にするには、Access2010の場合は、「ファイル」タブの「オプション」の「基本設定」のところで「新規データベースの並び順序」を「一般」または「一般 - レガシー」に設定したあとで、データベースの最適化/修復ツールを使用します。

































このへんの事情は以下のサイトに書かれています。

http://stackoverflow.com/questions/20719417/unsupported-collating-sort-order-when-trying-to-read-from-access-using-jackces?rq=1


なお、Access2003 の場合には、「新規データベースの並び順序」は、「ツール」の「オプション」のところにあるようです。





なおJackcess には他にも制限があるようです。(平成26年12月9日)













Android アプリ開発 はじめてのアプリ公開

Android 上で マイクロソフト(Microsoft)社の Access で作成したデータベース(mdb ファイルや accdb ファイル)の内容を閲覧したり編集したりするアプリを開発しておりました。

今回、作成したAndroid アプリを初めて google play で公開してみました。公開したのは、Accessデータベースを閲覧するアプリです。



https://play.google.com/store/apps/details?id=com.cofe_arabi.access_viewer



(2014.11.24)

上記のアプリに引き続いて次の2つのアプリを公開いたしました。


Accessデータベースのテーブルを編集するアプリ

https://play.google.com/store/apps/details?id=com.cofe_arabi.access_editor&hl=ja



Accessデータベースを作成したり、テーブルを作成したりするアプリ

https://play.google.com/store/apps/details?id=com.cofe_arabi.access_table&hl=ja





なお、Android 上で Access データベースを閲覧するアプリは、すでに存在しており、そっちのほうが私の作ったアプリよりはずっと使いやすくてすぐれているようです。



(2015.8.9)
なお、公開したこれらのアプリは、日本語と英語に対応しています。世界中のよりたくさんの人達にインストールして使用してもらうためには、他の言語にも対応させたほうがよいかなと思っています。それで、中国語に対応させようと思いつきました。





2014年11月2日日曜日

Dell の Dimension4600c を lubuntu 14.10 にアップグレード

古いマシンですが、Dell の Dimension 4600C を lubuntu 14.10 にアップグレードしました。なおアップグレードの途中でエラーが発生してしまいました。

このDimension4600CではAndroidアプリの開発 などをしております。

アップグレードの後で、Androidアプリの作成の続きをやろうとして eclipse を起動しようとしたところ、javaがないというメッセージがでました。以下のコマンドを順に入力することにより java をインストールしました。


sudo apt-get update

java -version

sudo apt-get install default-jdk


これで、eclipse が無事に起動するようになりました。




その後、このlubuntu には、samba をインストールしました。作成したアプリのapkファイルをNexus7に受け渡すために、sambaを使用する必要があったためです。アプリのapkファイルを用意して、それを Nexus7上で読み込込ませてインストールし、プログラムの動作の確認をNexus7上で行っています。




(2014-11-11)
その後、Synapticパッケージマネージャを使って、LibreOffice のWriter,Calc,Base をインストールしました。そうして、もともと はいっていた、AbiWordとGnumericは削除しました。



(2014-11-17)
このDimension4600C で、Eclipseを起動して、Androidアプリのプログラミングを行なっている最中に、時々、Eclipse が突然終了することがあります。主にソースコードを編集している最中に突然終了します。


(2014-11-28)
Lubuntu 上でeclipse が突然終了することが多くなってきたので、Windows7 上でeclipse を使ってアプリの開発を続けることにしました。Lubuntuのeclipse で作成したworkspace のプロジェクトをまずWindows7 の環境にコピーしました。その後Windows7 上で、eclipse を起動してコピーしたプロジェクトをimport したところ、なんとソースコードの中に書いてある日本語のコメントなどが、文字化けして変な表示になってしまいました。





AdMob について



AdMob に登録して、作るアプリに広告を表示させようと努力していましたが、なんとかできました。


以下を参考にさせていただきました。


https://developers.google.com/mobile-ads-sdk/docs/?hl=ja


https://developer.android.com/google/play-services/setup.html?hl=ja

https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals?hl=ja#play


https://developers.google.com/mobile-ads-sdk/docs/admob/additional-controls?hl=ja#testmode




eclipse でプロジェクトを右クリックして、properties を選択します。 次の画面でAndroidを選択して、Add ボタンを押し google-play-services_lib を追加します。はじめ、Add ボタンを押してもgoogle-play-services_libが表示されなくて困りました。以下の記述を参考にさせていただくことにより、google-play-services_libが表示されるようになりました。



Add Google Play Services to Your Project


To make the Google Play services APIs available to your app:
  1. Copy the library project at <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/ to the location where you maintain your Android app projects.
  2. Import the library project into your Eclipse workspace. Click File > Import, select Android > Existing Android Code into Workspace, and browse to the copy of the library project to import it.

2014年11月1日土曜日

Androidアプリ開発 (Accessファイルかどうかを判断する)

Android アプリ開発で Access ファイルの内容を表示するアプリの作成をしています。選択したファイルが Accessのファイルかどうかを判断するためのファンクションを作成しました。ファイルの拡張子が、mdb,MDB,accdb,ACCDBかどうかを調べています。


このファンクションを使用する場合、例えば strFileName という文字列が、Accessファイルかどうかを調べる場合には   StringUtils.checkifAccessFile(strFileName) のように使用します。値が true であれば、Accessのファイルという判断をします。












public class StringUtils {

public static String leftstring(String value, int length) {

   try {

       return value.substring(0, length);

   } catch ( Exception e ) {

       return value;

   }

}


public static String rightstring(String value, int length) {

try {

       if ( value.length() >= length )

           return value.substring(value.length() - length);

       else

           return value.substring(1);

   } catch ( Exception e ) {

       return value;

   }

}


public static boolean checkifAccessFile(String value) {

try {

if ( rightstring(value,4).equals(".mdb"))return true;
if ( rightstring(value,4).equals(".MDB"))return true;
if ( rightstring(value,6).equals(".accdb"))return true;
if ( rightstring(value,6).equals(".ACCDB"))return true;
     
 
           return false;

   } catch ( Exception e ) {

       return false;

   }

}


}

2014年10月31日金曜日

Android アプリ開発の進捗状況について

eclipse で Javaのコードを書いてAndroid アプリ開発の勉強をやっています。


昨日は、画面を縦方向にスクロールできるようにレイアウトを定義する方法や、インテントを使って画面を切り替える方法などを学習しました。


インテントを使って画面を切り替える場合には、画面のレイアウトを追加し、AndroidManifest.xml に定義を追加し、コードの中でインテントの記述をします。画面を切り替える際に文字列を引き渡すことができます。


なお、現在、作成しているのは、Android 上でAccess のデータベースファイル(mdbファイルやaccdbファイルなど)のテーブルの内容を表示するアプリです。Accessのデータベースにアクセスするために jackcessucanaccess などのライブラリを使用しています。


ucanaccess を使ったサンプルプログラムを以下でも紹介させていただいております。

http://chaos-fractal.blogspot.jp/2014/10/android-accessmdb.html


(2014.11.1)
テキストビューを横スクロールできるようにする方法を学習しました。layout ファイルを書き換えてやる必要があります。


アプリを公開する方法についても調べています。



(2014.11.21)
開発したAndroid アプリをはじめて公開 してみました。

2014年10月29日水曜日

Androidアプリ開発 Excelに書かれた株のリストのそれぞれの株価を取得して表示する

まずExcelファイルには、いくつかの株のコードが書かれています。以下のサンプルでは、Excelのファイルから株のコードを読み取り、それぞれの株について、インターネットのYahooのサイトから株価を取得して表示します。Excelから株コードを読み取るためにjexcelapi というライブラリを使用して、インターネットから株価を取得するためには、jsoup というライブラリを使用しています。

source code

Android アプリ開発 Excelシートのデータを表示する

Android アプリで、Excel ファイルを読み込んでシートの内容を表示するサンプルです。Jexcel というライブラリを使用しています。私の環境ではなぜか新しいタイプのxlsxファイルは読み込めず、古いタイプのxlsファイルは読み込めました。
source code

Android アプリ開発でプログラム内でビューを定義する

Android アプリ開発では、プログラムの中でビューを作ることもできます。以下のサンプルでは、7つのボタンを配置して、その後さらに、OKとCancelのボタンを作成しています。





import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        setContentView(linearLayout);

       
       
        Button[] buttons ;
       
       
        int num_arr;
       
        num_arr=7;
       
       
        buttons = new Button[num_arr];
       
        int i =0;
       
        while ( i < num_arr){
       
        buttons[i] = new Button(this);
        buttons[i].setText("number" + i );
            buttons[i].setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
            linearLayout.addView(buttons[i]);
       
        i=i+1;
       
        }
       
     
        Button button1 = new Button(this);
        button1.setText("OK");
        button1.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));
        linearLayout.addView(button1);

        Button button2 = new Button(this);
        button2.setText("Cancel");
        button2.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));
        linearLayout.addView(button2);
    }
}