# ๐Ÿ—„๏ธ EasySQL
![EasySQL](https://img.shields.io/badge/EasySQL-v2.0-06b6d4?style=for-the-badge) ![Electron](https://img.shields.io/badge/Electron-33-47848f?style=for-the-badge&logo=electron) ![React](https://img.shields.io/badge/React-18-61dafb?style=for-the-badge&logo=react) ![TypeScript](https://img.shields.io/badge/TypeScript-5-3178c6?style=for-the-badge&logo=typescript) ![Node.js](https://img.shields.io/badge/Node.js-18+-339933?style=for-the-badge&logo=node.js) **็ŽฐไปฃๅŒ–ๅคšๆ•ฐๆฎๅบ“็ฎก็†ๅทฅๅ…ท** *่ฝป้‡ใ€้ซ˜ๆ€ง่ƒฝใ€่ทจๅนณๅฐ*
--- ## โœจ ็‰นๆ€ง - ๐Ÿš€ **่ทจๅนณๅฐ** - ๅŸบไบŽ Electron๏ผŒๆ”ฏๆŒ Windowsใ€macOSใ€Linux - โšก **้ซ˜ๆ€ง่ƒฝ** - ๅŽŸ็”Ÿๆ•ฐๆฎๅบ“้ฉฑๅŠจ๏ผŒๆฏซ็ง’็บงๅ“ๅบ” - ๐ŸŽจ **็ฒพ็พŽ UI** - ็ฎ€็บฆ็Žฐไปฃๆต…่‰ฒไธป้ข˜๏ผŒๅœ†่ง’่ฎพ่ฎก๏ผŒๆŸ”ๅ’Œ้˜ดๅฝฑ - ๐Ÿ”Œ **ๅคšๆ•ฐๆฎๅบ“** - ๆ”ฏๆŒ MySQLใ€PostgreSQLใ€SQLiteใ€SQL Serverใ€MongoDBใ€Redisใ€MariaDB - ๐Ÿ“ **ๆ™บ่ƒฝ็ผ–่พ‘ๅ™จ** - Monaco Editor๏ผŒSQL ่ฏญๆณ•้ซ˜ไบฎใ€ๆ™บ่ƒฝ่กฅๅ…จ - ๐Ÿ“Š **ๆ•ฐๆฎ็ผ–่พ‘** - ๆ”ฏๆŒ็›ดๆŽฅ็ผ–่พ‘่กจๆ ผๆ•ฐๆฎ๏ผŒ่™šๆ‹ŸๆปšๅŠจๅคงๆ•ฐๆฎ้‡๏ผŒๅˆ—ๅฎฝๅฏๆ‹–ๅŠจ่ฐƒๆ•ด - ๐Ÿ“… **ๆ—ฅๆœŸ้€‰ๆ‹ฉๅ™จ** - ๆ™บ่ƒฝ่ฏ†ๅˆซๆ—ฅๆœŸๅญ—ๆฎต๏ผŒๅ†…็ฝฎ็ฒพ็กฎๅˆฐ็ง’็š„ๆ—ฅๆœŸๆ—ถ้—ด้€‰ๆ‹ฉๅ™จ - ๐Ÿ› ๏ธ **่กจ่ฎพ่ฎกๅ™จ** - Navicat ้ฃŽๆ ผ๏ผŒๅฏ่ง†ๅŒ–็ผ–่พ‘ๅญ—ๆฎตใ€็ดขๅผ•ใ€ๅค–้”ฎใ€่กจ้€‰้กน - ๐Ÿ—ƒ๏ธ **ๅฎŒๆ•ด็ฎก็†** - ๅˆ›ๅปบ/ๅˆ ้™ค/้‡ๅ‘ฝๅ/ๅคๅˆถๆ•ฐๆฎๅบ“ๅ’Œ่กจ - ๐Ÿ“ค **ๅฏผๅ…ฅๅฏผๅ‡บ** - ๆ”ฏๆŒ JSONใ€Navicat NCX ๆ ผๅผ่ฟžๆŽฅ้…็ฝฎๅฏผๅ…ฅๅฏผๅ‡บ๏ผˆๅซๅฏ†็ ่งฃๅฏ†๏ผ‰ - ๐Ÿ”„ **ๆ‰น้‡ๆ“ไฝœ** - ๆ”ฏๆŒๅคš้€‰่ฟžๆŽฅๆ‰น้‡ๅˆ ้™ค็ฎก็† ## ๐Ÿ—ƒ๏ธ ๆ”ฏๆŒ็š„ๆ•ฐๆฎๅบ“ | ๆ•ฐๆฎๅบ“ | ็Šถๆ€ | ้ฉฑๅŠจ | |--------|------|------| | ๐Ÿฌ MySQL | โœ… | mysql2 | | ๐Ÿ˜ PostgreSQL | โœ… | pg | | ๐Ÿ’พ SQLite | โœ… | sql.js | | ๐Ÿ“Š SQL Server | โœ… | mssql | | ๐Ÿฆญ MariaDB | โœ… | mysql2 | | ๐Ÿƒ MongoDB | โœ… | mongodb | | โšก Redis | โœ… | ioredis | ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### ็Žฏๅขƒ่ฆๆฑ‚ - Node.js 18+ - npm ๆˆ– yarn ### ๅฎ‰่ฃ… ```bash # ๅ…‹้š†้กน็›ฎ git clone https://github.com/your-repo/easysql.git cd easysql # ๅฎ‰่ฃ…ไพ่ต– npm install # ๅผ€ๅ‘ๆจกๅผ่ฟ่กŒ npm run electron:dev # ๆž„ๅปบๅบ”็”จ๏ผˆ่‡ชๅŠจ้€’ๅขž็‰ˆๆœฌๅท๏ผ‰ npm run electron:build ``` ## ๐Ÿ“ธ ็•Œ้ข้ข„่งˆ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ—„๏ธ EasySQL v2.0 โ”€ โ–ก โœ• โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ ๐Ÿ  ไธป้กต โ”‚ ๐Ÿ“ ๆŸฅ่ฏข1 โ”‚ ๐Ÿ“‹ users โ”‚ + โ”‚ โ”‚ + ๆ–ฐๅปบ่ฟžๆŽฅ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ SELECT * FROM users โ”‚ โ”‚ โ”‚ โ”€ ่ฟžๆŽฅ โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ WHERE status = 'active' โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ORDER BY created_at DESC โ”‚ โ”‚ โ”‚ ๐Ÿฌ MySQLๆœฌๅœฐ โ”‚ โ”‚ LIMIT 100; โ”‚ โ”‚ โ”‚ ๐Ÿ˜ PostgreSQL โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ ๐Ÿ“Š SQL Server โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ id โ”‚ name โ”‚ email โ”‚ created_at โ”‚ โ”‚ โ”‚ โ”‚ โ”€ mydb โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ ๐Ÿ“‹ users โ”‚ โ”‚ โ”‚ 1 โ”‚ Alice โ”‚ a@... โ”‚ 2024-01-01 โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“‹ orders โ”‚ โ”‚ โ”‚ 2 โ”‚ Bob โ”‚ b@... โ”‚ 2024-01-02 โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ“‹ products โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ— ๅฐฑ็ปช ยท 2 ่กŒ (0.05s) EasySQL v2.0 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ - **่ฟ่กŒๆ—ถ**: Electron 33 - **ๅ‰็ซฏ**: React 18 + TypeScript 5 - **ๆ ทๅผ**: Tailwind CSS 3 - **ๆž„ๅปบ**: Vite 5 - **็ผ–่พ‘ๅ™จ**: Monaco Editor - **ๆ•ฐๆฎๅบ“้ฉฑๅŠจ**: mysql2, pg, sql.js, mssql, mongodb, ioredis ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` easysql/ โ”œโ”€โ”€ electron/ # Electron ไธป่ฟ›็จ‹ โ”‚ โ”œโ”€โ”€ main.js # ไธป็จ‹ๅบๅ…ฅๅฃ โ”‚ โ””โ”€โ”€ preload.js # ้ข„ๅŠ ่ฝฝ่„šๆœฌ โ”œโ”€โ”€ src/ # React ๅ‰็ซฏ โ”‚ โ”œโ”€โ”€ components/ # UI ็ป„ไปถ โ”‚ โ”‚ โ”œโ”€โ”€ TitleBar.tsx # ๆ ‡้ข˜ๆ  โ”‚ โ”‚ โ”œโ”€โ”€ Sidebar.tsx # ไพง่พนๆ ๏ผˆ่ฟžๆŽฅ/ๆ•ฐๆฎๅบ“/่กจๆ ‘๏ผ‰ โ”‚ โ”‚ โ”œโ”€โ”€ MainContent.tsx # ไธปๅ†…ๅฎนๅŒบ โ”‚ โ”‚ โ”œโ”€โ”€ SqlEditor.tsx # SQL ็ผ–่พ‘ๅ™จ๏ผˆMonaco๏ผ‰ โ”‚ โ”‚ โ”œโ”€โ”€ VirtualDataTable.tsx # ่™šๆ‹ŸๆปšๅŠจๆ•ฐๆฎ่กจๆ ผ โ”‚ โ”‚ โ”œโ”€โ”€ TableDesigner.tsx # ่กจ่ฎพ่ฎกๅ™จ๏ผˆNavicat ้ฃŽๆ ผ๏ผ‰ โ”‚ โ”‚ โ”œโ”€โ”€ ConnectionModal.tsx # ่ฟžๆŽฅ้…็ฝฎๅผน็ช— โ”‚ โ”‚ โ”œโ”€โ”€ CreateDatabaseModal.tsx # ๆ–ฐๅปบๆ•ฐๆฎๅบ“ๅผน็ช— โ”‚ โ”‚ โ”œโ”€โ”€ CreateTableModal.tsx # ๅฟซ้€Ÿๆ–ฐๅปบ่กจๅผน็ช— โ”‚ โ”‚ โ””โ”€โ”€ InputDialog.tsx # ้€š็”จ่พ“ๅ…ฅๅฏน่ฏๆก† โ”‚ โ”œโ”€โ”€ lib/ โ”‚ โ”‚ โ”œโ”€โ”€ electron-api.ts # Electron API ๅฐ่ฃ… โ”‚ โ”‚ โ””โ”€โ”€ hooks.ts # ่‡ชๅฎšไน‰ Hooks โ”‚ โ”œโ”€โ”€ App.tsx โ”‚ โ”œโ”€โ”€ types.ts โ”‚ โ””โ”€โ”€ index.css โ”œโ”€โ”€ scripts/ โ”‚ โ”œโ”€โ”€ bump-version.js # ็‰ˆๆœฌๅท้€’ๅขž่„šๆœฌ โ”‚ โ””โ”€โ”€ generate-icons.js # ๅ›พๆ ‡็”Ÿๆˆ่„šๆœฌ โ”œโ”€โ”€ index.html โ”œโ”€โ”€ package.json โ”œโ”€โ”€ tailwind.config.js โ”œโ”€โ”€ tsconfig.json โ””โ”€โ”€ vite.config.ts ``` ## โŒจ๏ธ ๅฟซๆท้”ฎ | ๅฟซๆท้”ฎ | ๅŠŸ่ƒฝ | |--------|------| | `Ctrl+Enter` | ๆ‰ง่กŒ SQL | | `Ctrl+S` | ไฟๅญ˜ๆ–‡ไปถ/ไฟๅญ˜ไฟฎๆ”น | | `Ctrl+O` | ๆ‰“ๅผ€ SQL ๆ–‡ไปถ | | `Ctrl+Shift+F` | ๆ ผๅผๅŒ– SQL | | `Ctrl+Q` | ๆ–ฐๅปบๆŸฅ่ฏข | | `Ctrl+W` | ๅ…ณ้—ญๅฝ“ๅ‰ๆ ‡็ญพ | | `Ctrl+C` | ๅคๅˆถ้€‰ไธญๅ•ๅ…ƒๆ ผ | | `Ctrl+F` | ๆœ็ดข๏ผˆไพง่พนๆ /่กจๆ ผ๏ผ‰ | | `ๅŒๅ‡ป่ฟžๆŽฅ` | ๅฟซ้€Ÿ่ฟžๆŽฅๆ•ฐๆฎๅบ“ | | `ๅŒๅ‡ปๅ•ๅ…ƒๆ ผ` | ็ผ–่พ‘ๅ•ๅ…ƒๆ ผๆ•ฐๆฎ | | `ๅณ้”ฎ่œๅ•` | ่ฟžๆŽฅ/ๆ•ฐๆฎๅบ“/่กจๆ“ไฝœ | ## ๐Ÿ”ง ้…็ฝฎ่ฏดๆ˜Ž ่ฟžๆŽฅ้…็ฝฎไฟๅญ˜ๅœจ็”จๆˆท้…็ฝฎ็›ฎๅฝ•๏ผš - Windows: `%APPDATA%\easysql\connections.json` - macOS: `~/Library/Application Support/easysql/connections.json` - Linux: `~/.config/easysql/connections.json` ## ๐Ÿ“ฆ npm ่„šๆœฌ | ๅ‘ฝไปค | ่ฏดๆ˜Ž | |------|------| | `npm run dev` | ๅฏๅŠจ Vite ๅผ€ๅ‘ๆœๅŠกๅ™จ | | `npm run build` | ๆž„ๅปบๅ‰็ซฏ่ต„ๆบ | | `npm run electron:dev` | ๅผ€ๅ‘ๆจกๅผ่ฟ่กŒ Electron | | `npm run electron:build` | ๆ‰“ๅŒ…ๅบ”็”จ๏ผˆ่‡ชๅŠจ้€’ๅขž่กฅไธ็‰ˆๆœฌ๏ผ‰ | | `npm run electron:build:minor` | ๆ‰“ๅŒ…ๅบ”็”จ๏ผˆ้€’ๅขžๆฌก็‰ˆๆœฌ๏ผ‰ | | `npm run electron:build:major` | ๆ‰“ๅŒ…ๅบ”็”จ๏ผˆ้€’ๅขžไธป็‰ˆๆœฌ๏ผ‰ | | `npm run version:patch` | ๅช้€’ๅขž่กฅไธ็‰ˆๆœฌๅท | | `npm run version:minor` | ๅช้€’ๅขžๆฌก็‰ˆๆœฌๅท | | `npm run version:major` | ๅช้€’ๅขžไธป็‰ˆๆœฌๅท | | `npm run icons` | ็”Ÿๆˆๅบ”็”จๅ›พๆ ‡ | ## ๐Ÿ“‹ ็‰ˆๆœฌๅท็ฎก็† ้กน็›ฎไฝฟ็”จ่ฏญไน‰ๅŒ–็‰ˆๆœฌๅท (SemVer)๏ผš`ไธป็‰ˆๆœฌ.ๆฌก็‰ˆๆœฌ.่กฅไธ็‰ˆๆœฌ` ```bash # ้€’ๅขž่กฅไธ็‰ˆๆœฌ 2.0.0 -> 2.0.1 npm run version:patch # ้€’ๅขžๆฌก็‰ˆๆœฌ 2.0.0 -> 2.1.0 npm run version:minor # ้€’ๅขžไธป็‰ˆๆœฌ 2.0.0 -> 3.0.0 npm run version:major # ๆž„ๅปบๆ—ถ่‡ชๅŠจ้€’ๅขž็‰ˆๆœฌๅท npm run electron:build # patch npm run electron:build:minor # minor npm run electron:build:major # major ``` ## ๐Ÿค ่ดก็Œฎ ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ ## ๐Ÿ“„ License MIT ---
Made with โค๏ธ using Electron + React + Node.js