DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[ スレッド内全1レス(親記事-1 表示) ] <<
0
>>
■35701
/ 親記事)
DuckdbのJDBCサンプル
▼
■
□投稿者/ duckdb-jdbc-sample
一般人(1回)-(2026/03/13(Fri) 14:12:31)
環境/言語:[Java]
分類:[その他]
てすと
マルチポストを報告
Javascriptを有効にしてください
この投稿がマルチポスト(全く同じ内容の投稿が別の掲示板に投稿されている)の場合は、以下のフォームをご利用いただくと、報告の投稿が簡単に行えます。
このフォームに必要事項を入力後、「返信フォームに入力する」ボタンをクリックすると、このページの下にある
返信フォーム
の項目が自動的に埋まります。実際に投稿するには、その後、返信フォームの「送信」ボタンをクリックしてください。
このフォームを利用しても返信フォームが埋まるだけですので、後で書き直してから投稿することもできます。
「マルチポストされている場所」には、マルチポストされている場所のURLを入力してください。複数のURLを改行区切りで入力することができます。
マルチポストされている場所
オプション
マルチポスト先の投稿が、別人によるいたずらである可能性が高い
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
■35702
/ ResNo.1)
Re[1]: DuckdbのJDBCサンプル
▲
▼
■
□投稿者/ Sample
一般人(1回)-(2026/03/13(Fri) 14:16:51)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class DuckDBClientSample {
public static void main(String[] args) throws Exception {
init();
System.out.println("DuckDB(duckdb.db)に接続しました。SQLを入力してください:");
System.out.println("ヘルプを参照する場合は「help」、終了する場合は「exit」もしくは「quit」を入力してください。");
try {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("> ");
StringBuilder commandBuilder = new StringBuilder();
// セミコロンが来るまで読み込み
while (true) {
String line;
try {
line = scanner.nextLine();
} catch (NoSuchElementException e) {
break;
}
if (line.trim().equalsIgnoreCase("exit")
|| line.trim().equalsIgnoreCase("quit")) {
System.out.println("切断しました。");
System.exit(0);
}
if (line.trim().equalsIgnoreCase("help")) {
usage();
} else {
commandBuilder.append(line).append(" ");
if (line.trim().endsWith(";")) {
break;
}
}
}
String command = commandBuilder.toString().trim();
long start = System.currentTimeMillis();
if (1 < command.length()) {
try {
sendCommand(command); // セミコロン付きのコマンドを送信
} catch (Exception e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
//Thread.sleep(30);
System.out.println("処理時間 time[ms]=" + (end - start) + " count=" + count);
}
}
} catch (Throwable e) {
e.printStackTrace();
System.exit(1);
} finally {
if (stmt != null && !stmt.isClosed()) {
stmt.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
}
private static void usage() {
System.out.print("> ");
}
static Connection conn = null;
static Statement stmt = null;
public static void init() {
try {
conn = DriverManager.getConnection("jdbc:duckdb:duckdb.db");
stmt = conn.createStatement();
//stmt.execute("INSTALL sqlite");
//stmt.execute("LOAD sqlite");
//stmt.execute("ATTACH 'sqlite.db' (TYPE sqlite)");
//stmt.execute("USE sqlite");
} catch (Exception e) {
}
}
private static long count = 0L;
private static void sendCommand(String sql) throws Exception {
try {
count = 0L;
if (null == stmt || stmt.isClosed()) {
stmt = conn.createStatement();
}
if (sql.trim().startsWith("COMMIT")) {
conn.commit();
conn.setAutoCommit(true);
System.out.println("commit");
return;
}
if (sql.trim().startsWith("ROLLBACK")) {
conn.rollback();
conn.setAutoCommit(true);
System.out.println("rollback");
return;
}
if (sql.trim().startsWith("BEGIN TRANSACTION")) {
conn.setAutoCommit(false);
System.out.println("begin transaction");
return;
}
if (sql.startsWith("FROM") || sql.startsWith("from")) {
sql = "SELECT * " + sql;
}
if (sql.startsWith("DIFF") || sql.startsWith("diff")) {
sql = "SELECT * FROM " + sql.split(" ")[1]
+ " EXCEPT"
+ " SELECT * FROM " + sql.split(" ")[2].replaceAll(";", "")
+ " UNION ALL"
+ " SELECT * FROM " + sql.split(" ")[2].replaceAll(";", "")
+ " EXCEPT"
+ " SELECT * FROM " + sql.split(" ")[1]
+ (sql.endsWith(";") ? "" : ";");
}
if (sql.startsWith("EXPLAIN") || sql.startsWith("explain")
|| sql.startsWith("SHOW") || sql.startsWith("show")
|| sql.startsWith("SELECT") || sql.startsWith("select")) {
ResultSet rs = stmt.executeQuery(sql);
int colsize = rs.getMetaData().getColumnCount();
List<String> header = new ArrayList<>();
for (int i = 1; i <= colsize; i++) {
header.add(rs.getMetaData().getColumnName(i));
}
System.out.println("[debug]SQL=" + sql);
System.out.println("" + String.join(",", header));
StringBuilder sb = new StringBuilder(4096);
String value = null;
while (rs.next()) {
count++;
List<String> row = new ArrayList<>();
for (int i = 0; i < colsize; i++) {
value = rs.getString(i + 1);
if (null == value) {
row.add("");
} else {
row.add("\"" + value + "\"");
}
}
sb.append(String.join(",", row));
sb.append("\n");
}
if (colsize == 0) {
System.out.println("__NO_HIT__ sql=" + sql);
} else {
System.out.print(sb.toString());
}
} else if (sql.startsWith("INSERT") || sql.startsWith("insert")) {
count = stmt.executeUpdate(sql);
//System.out.println("result=" + result + " sql=" + sql);
} else if (sql.startsWith("UPDATE") || sql.startsWith("update")) {
count = stmt.executeUpdate(sql);
//System.out.println("result=" + result + " sql=" + sql);
} else if (sql.startsWith("DELETE") || sql.startsWith("delete")) {
count = stmt.executeUpdate(sql);
//System.out.println("result=" + result + " sql=" + sql);
} else {
boolean result = stmt.execute(sql);
System.out.println("result=" + result + " sql=" + sql);
}
} catch (SQLException e) {
e.printStackTrace();
//throw e;
}
}
}
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
引用返信
削除キー/
編集
削除
このスレッドをツリーで一括表示
スレッド内ページ移動 / <<
0
>>
このスレッドに書きこむ
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-